Установка параметра маршрута в промежуточном программном обеспечении в Laravel - PullRequest
0 голосов
/ 22 января 2019

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

У меня есть такие маршруты

Route::group([ 'prefix' => 'department/{department}', 'middleware' => [ 'auth.department' ] ], function () {
    Route::post('employee/create', 'EmployeeController@store')->name('employees.store');
});

Это мое промежуточное ПО auth.department (AuthDepartment)

class AuthDepartment
{
    public function handle($request, Closure $next)
    {
        $department = Department::find($request->department);
        //do something with the department
        //I want to set the $department (Department model) in the place of {department} in the route.


        return $next($request);
    }
}

Это EmployeeController

class EmployeeController extends Controller {
    public function store($department)
    {
    }
}

Как вы можете видеть в коде, я использую параметр $ Department для получения идентификатора отдела из маршрута.Но вместо того, чтобы получить целое число в качестве параметра, я хочу связать модель следующим образом.

class EmployeeController extends Controller {
     public function store(Department $department)
     {
     }
}

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

$request->route()->setParameter('department', $department)

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

Если бы я использовал

$request->route()->setParameter('department', $department)

, чтобы установить параметр, я не могу установить тип в действии контроллера, как это.

store(Department $department)

Но это нормально

 store(Department $department)

Но я хочу это

store(Department $department)

1 Ответ

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

В Laravel это уже встроено. Это называется привязкой модели маршрута.

https://laravel.com/docs/5.7/routing#route-model-binding

Удалите промежуточное программное обеспечение и вместо этого сохраните ваш контроллер как есть. Laravel автоматически использует идентификатор в запросе, чтобы найти модель и предоставить вам ее экземпляр. Если модель не может быть найдена, Laravel выдаст вам 404 ответа.

...