Laravel делится данными со всеми видами - PullRequest
0 голосов
/ 10 января 2019

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

Я создал новый BaseController в соответствии с первым ответом здесь:

Как передать данные во все представления в Laravel 5?

, и это работает для простого теста (просто разделяя типизированную переменную), но когда я пытаюсь использовать Auth::user()->id в __construct методе BaseController (который в других моих контроллерах всегда возвращает идентификатор текущего вошел в систему пользователя), я получаю Trying to get property 'id' of non-object.

Я пытался добавить use App\User в верхней части BaseController (хотя это обычно не требуется), а также пытался добавить биты для плагина разрешения Spatie для laravel, но ни один из них не дал никакого эффекта.

Я попробовал dd на Auth::user() и просто получил 'null'. Мне кажется, что пользовательские данные, возможно, не были загружены на этом этапе, но BaseController расширяет Controller так же, как MyWorkingController расширяет Controller, поэтому я не уверен, почему Auth::user()->id здесь не работает, когда работает нормально?

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Запишите это в AppServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use DB;
use Auth;
use App\Cart;

class AppServiceProvider extends ServiceProvider
{

    public function boot()
    {
        Schema::defaultStringLength(191);

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

                view()->composer('*', function($view)
                {
                    if (Auth::check()) {
                        $cart = Cart::where('user_id', Auth::user()->user_id)->count();
                        $view->with('cartItem', $cart );
                    }else {
                        $view->with('cartItem', 0);
                    }
                });


            });

    }


}

По вашему мнению, просто напишите

{{ $cartItem }}
0 голосов
/ 10 января 2019

откройте файл AppServiceProvider.php из папки Providers и напишите приведенный ниже код в функции загрузки

     view()->composer('*', function ($view)
    {
        $view->with('cartItem', $cart );

    });

А теперь перейдите на страницу просмотра и напишите:

{{ $cartItem }}
0 голосов
/ 10 января 2019

Вы не можете получить доступ к Auth в конструкторах, потому что middleware еще не запущен. Вы можете использовать либо View composer , либо попробовать, хотя я не тестировал.

class BaseController extends Controller {
    protected $userId;

    public function __construct() {
        $this->middleware(function ($request, $next) {
           $this->userId= Auth::user()->id;

           return $next($request);
        });
    }
}
0 голосов
/ 10 января 2019

Создайте базовый контроллер, который содержит всю информацию, которую вы хотите использовать совместно со всеми контроллерами / страницами / представлениями, и разрешите другим контроллерам расширять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...