我正在开发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参数从路线中获取部门ID。但是,我不想像这样将整数绑定为参数。
class EmployeeController extends Controller {
public function store(Department $department)
{
}
}
使用我当前的代码,它不起作用。我尝试按照以下步骤在中间件中设置route参数,以匹配(绑定模型)操作中的值。
$request->route()->setParameter('department', $department)
但是它不起作用。如何使用中间件中的模型设置/替换路由参数,该模型可以在控制器的动作中绑定到该参数?可能吗?有什么更好的方法?
如果我使用
$request->route()->setParameter('department', $department)
要设置参数,我无法在控制器的操作中设置类型。
store(Department $department)
但这很好
store(Department $department)
但是我想要这个
store(Department $department)
答案 0 :(得分:0)
Laravel已经内置了它。它称为路由模型绑定。
https://laravel.com/docs/5.7/routing#route-model-binding
删除中间件,而将控制器保持原样。 Laravel将在请求中自动使用ID来查找模型并为您提供实例。如果找不到模型,Laravel会为您抛出404响应。