Переменные, установленные в промежуточном программном обеспечении, являются нулевыми в конструкторе контроллера ресурсов, но имеют значение (не нулевое) в других методах контроллера - PullRequest
0 голосов
/ 03 мая 2018

Я использую промежуточное программное обеспечение для моего контроллера ресурсов, и в этом промежуточном программном обеспечении я устанавливаю некоторые глобальные переменные. Теперь я хочу получить доступ к этим переменным в конструкторе моего контроллера, но я получаю нулевое значение, когда пытаюсь получить доступ к этим переменным в конструкторе, в то время как я получаю не нулевое значение, если я получаю доступ к ним в любом другом методе этого контроллера. Я использую Laravel 5.6. Ниже приводится его код.

Контроллер:

class PhaseController extends ApiController
{
    public function __construct(Request $request)
    {
       parent::__construct();
       $this->middleware('myMiddleware');
       $myVar = $request->myVar;
    }
 }

Middleware:

class myMiddleware
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
 public function handle($request, Closure $next)
 {
    $explodedPath = explode("/",$request->path());
    $request["myVar1"] = $explodedPath[5];
    //Code here
    return $next($request);
  }
}

Это происходит потому, что объект запроса получен до вызова промежуточного программного обеспечения, так что даже когда я изменяю объект запроса в промежуточном программном обеспечении, Constructor все еще использует старое состояние объекта запроса. Здесь мне нужно обновить объект запроса, чтобы получить его новое состояние. Но я не знаю как.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Попробуйте добавить его в запрос ParameterBag:

public function handle($request, Closure $next)
{
    $parts = explode('/', $request->path()); 
    $request->attributes->add(['myVar1' => data_get($parts, 5)]);

    // Code here

    return $next($request);
}

Тогда в вашем контроллере:

$myVar = $request->get('myVar1');

Edit:


Если в контроллере требуются параметры маршрута, почему бы не использовать

$request->route()->parameters();

или

$request->route('parameter_name'); // where name is based on the name in your route definition.

...