PHP laravel boot() 中的中间件

PHP laravel middleware in boot()

在我的项目中,我正在使用 Laravel 5.2,现在我被这个小问题困住了,不知道如何解决。

我需要在所有视图上仅与签名用户共享一个变量。 我知道我需要使用 view() -> composer() 来做到这一点,但是怎么做呢?

代码会去哪里?我不能在 AppServiceProvider 中使用它,因为在会话开始之前 boot() 方法是 运行。我看到有人推荐使用中间件来做我想做的事情,但我也想不通。 我会在哪里写这个新的中间件?我会在哪里使用 view() -> composer()?

更详细一点: 我正在尝试检查好友请求,如果有任何请求,则将其放在每个视图的用户侧边栏中。

我的视图编辑器在 boot() 方法中看起来像这样,但由于 Auth::check()

而不起作用
    if (Auth::check()) {

        view() -> composer('*', function($view) {

            // Check for friend requests
            $friend_requests = DB::table('friends')
                -> where('user_id_receiver', '=', Auth::user() -> id)
                -> where (function($query) {
                    $query -> where('status', '=', 2);
                })
                -> get();

            $view -> with('friend_requests', $friend_requests);

        });

    }

我的 blade 布局也很简单,只是使用 extends 和 include 来做侧边栏和其他东西。

如果我需要澄清什么,请告诉我。 提前致谢。

好吧,我真的想通了。 我创建了一个名为 ViewComposerServiceProvider 的新提供程序(从 artisan 命令行执行此操作)。

提供程序中的 boot() 方法现在如下所示:

public function boot()
{

    view() -> composer('*', 'App\Http\ViewComposers\UserMenuComposer');

}

然后我在 App/Http 中创建了一个名为 ViewComposers 的新文件夹,这是我现在绑定某些视图所需的变量的地方。在这个文件夹中,我现在有 1 个文件,因为这就是我现在所需要的。

该文件名为 UserMenuComposer,内容是这样的:

<?php

    namespace App\Http\ViewComposers;

    use Illuminate\Contracts\View\View;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\DB;

    class UserMenuComposer {

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view -> with('friendRequests', $this -> getFriendRequests());
    }

    /**
     * Get all friend requests
     *
     * @return mixed
     */
    private function getFriendRequests()
    {

        if (Auth::check()) {

            return DB::table('friends')
            -> where('user_id_receiver', '=', Auth::user() -> id)
            -> where (function($query) {
                $query -> where('status', '=', 2);
            })
            -> get();

        } else {

            return false;

        }


    }

}

最后,如您所见,我现在可以访问她的 Auth()。