После трассировки по коду вот проблема:
Контроллер получает конвейер через маршрутизатор, и порядок выглядит следующим образом:
-> запустить контроллер __construct ()
-> затем пропустите его через конвейер и запустите промежуточное ПО в порядке важности
-> затем выполнять другие операции (например, вызывать index () или любую точку входа, необходимую для маршрута)
Промежуточное программное обеспечение - это то, что обрабатывает сессии, запросы, аутентификацию и т. Д.
Все промежуточное ПО работает между контроллером __construct и точкой входа.
Итак, в контроллере, если вам нужно сделать что-то вроде:
__construct() {
$this->middleware(function(Request $request, $next) {
echo 'step 1';
});
echo 'step 2';
}
public function index() { echo 'step 3'; }
Вы получите:
шаг 2 <--- внутри области __construct (все, что определено в обратном вызове промежуточного программного обеспечения, здесь недоступно). </p>
шаг 1 <- вне области видимости __construct (но до области видимости index ()) </p>
шаг 3 <- внутри индекса, все, что определено в шаге 1, доступно здесь. </p>
Таким образом, все, что требует их, гарантированно существует до того, как это потребуется в функциях точки входа, но не внутри конструктора, если только оно не помещено в обратный вызов промежуточного программного обеспечения. Поэтому лучшее, что вы можете сделать, - это запустить код в этом «промежуточном» состоянии. В конце концов, сделав его доступным, когда вам это нужно. Здесь есть ограничение, вы можете обойти его, но это довольно раздражает.
Я не могу найти способ получить пользовательский сеанс до этого момента, я предполагаю, что вам придется прочитать его из redis и как-то разрешить его самостоятельно, поскольку объекты laravel еще не заполнены, так как это слишком рано в конвейере.