Доступ к данным сеанса из родительского контроллера без передачи их в - PullRequest
0 голосов
/ 08 июля 2019

Могу ли я получить доступ к данным сеанса из Controller, не передавая запрос из MyController?

class Controller extends BaseController
{
    public function __construct()
    {
        // ** next line throws error:
        // "Session store not set on request."
        $userdata = request()->session()->get('userdata');

        // I want to inject `userdata` into every template without
        // passing data from child controllers.
        view()->share(['userdata' => $userdata);
    }
}

class MyController extends Controller
{
    public function __construct(Request $request)
    {
        // This works, so the data is in fact in the session.
        // I don't want to pass it, or `$request` to the parent from here.
        $userdata = $request->session()->get('userdata');
        ...
    }
}

1 Ответ

1 голос
/ 09 июля 2019

Причина, по которой он не будет работать в вашем методе __construct(), заключается в том, что промежуточное программное обеспечение StartSession еще не было запущено.

Чтобы обойти это, вы можете просто использовать метод middleware() на контроллере:

public function __construct()
{
    $this->middleware(function ($request, $next) {

        $userdata = $request->session()->get('userdata');

        view()->share(compact('userdata'));

        return $next($request);
    });
}


Руководство по обновлению Laravel 5.3 (прокрутите вниз раздел Контроллеры )

В Laravel 5.3 вы не можете получить доступ к сеансу или аутентифицированному пользователю в конструкторе вашего контроллера, потому что промежуточное ПО еще не запущено.
В качестве альтернативы вы можете определить промежуточное программное обеспечение на основе Closure непосредственно в конструкторе вашего контроллера.

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