Промежуточное ПО PHP laravel в boot()

В моем проекте я использую Laravel 5.2, и теперь я застрял в этой маленькой проблеме, которую не могу понять, как ее исправить.

Мне нужно поделиться переменной только с подписанными пользователями во всех представлениях. Я знаю, что для этого мне нужно использовать view() -> composer(), но как?

Куда девался код? Я не могу использовать его в AppServiceProvider, так как метод boot() запускается до начала сеанса. Я видел, как кто-то рекомендовал использовать промежуточное программное обеспечение для того, что я пытаюсь сделать, но я тоже не могу этого понять. Где бы я написал это новое промежуточное ПО? Где бы я тогда использовал view() -> composer()?

Немного подробнее: я пытаюсь проверить запросы на добавление в друзья и размещать их на боковой панели пользователей при каждом просмотре, если есть какие-либо запросы.

А мой 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);

        });

    }

Мой макет блейда также довольно прост, я использую только расширения и включения для боковой панели и других вещей.

Если мне нужно что-то уточнить, пожалуйста, скажите. Заранее спасибо.


person Kaizokupuffball    schedule 16.02.2016    source источник


Ответы (1)


Хорошо, я действительно понял это. Я создал нового провайдера, который назвал ViewComposerServiceProvider (сделал это из командной строки ремесленника).

Метод 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() в ней, как вы можете видеть.

person Kaizokupuffball    schedule 16.02.2016