Laravel 8: параметры GET недоступны во входных данных запроса промежуточного программного обеспечения

Я определил этот маршрут в файле маршрута web.php:

Route::get('/middleware_test_user_project_change/{pro_id}/{projet_id}', function ($pro_id, $projet_id) {
    return 'test';
})->middleware('user.project.change');

Я определил эту функцию handle в своем промежуточном программном обеспечении (которое я добавил в ядро ​​со следующей записью: 'user.project.change' => \App\Http\Middleware\CheckUserProposition::class):

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\User;

class CheckUserProposition
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $projet_id = $request->input('projet_id');
        $pro_id = $request->input('pro_id');
        return $next($request);
    }

}

Однако и $projet_id, и $pro_id возвращают NULL при доступе к следующему URL-адресу: https://XYZ/middleware_test_user_project_change/1/1

Поскольку я правильно настроил промежуточное ПО и параметры маршрутов (которые, наконец, являются переменными GET), почему я не могу использовать их в своем промежуточном ПО в качестве входных данных запроса?


person JarsOfJam-Scheduler    schedule 10.12.2020    source источник
comment
попробуйте request('projet_id') внутри промежуточного ПО   -  person Kamlesh Paul    schedule 10.12.2020
comment
это работает, но почему? Я не нашел ни одного примера кода, содержащего без символа доллара request-> здесь: laravel.com/docs/8.x/requests#accessing-the-request + laravel.com/docs/8.x/middleware   -  person JarsOfJam-Scheduler    schedule 10.12.2020
comment
laravel.com/docs/8.x/helpers#method-request   -  person Kamlesh Paul    schedule 10.12.2020
comment
› Функция запроса возвращает текущий экземпляр запроса или получает значение поля ввода из текущего запроса: Итак, если это эквивалентно $request->input('foobar');, почему это последнее не работает?   -  person JarsOfJam-Scheduler    schedule 10.12.2020


Ответы (1)


Параметры маршрута не являются частью «входов». Это отдельная вещь; вот почему вы не видите их, когда получаете все входные данные с помощью $request->all().

Если вам нужен параметр маршрута, вам, вероятно, следует явно запросить его:

$request->route('projet_id');
$request->route()->parameter('projet_id');
person lagbox    schedule 10.12.2020
comment
Что такое входы? Док не ясно говорит об этом - person JarsOfJam-Scheduler; 10.12.2020
comment
полезная нагрузка запроса и строка запроса являются входными данными - person lagbox; 10.12.2020