我试着做一些事情,但我甚至不能想象如何去做。
要将参数传递给中间件,我这样做:
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
Laravel文档然后获取句柄函数中的参数。。
但是laravel建议在Controller中的__结构中声明中间件的使用,而不是在路由中。
所以...
public function __construct() {
$this->middleware('auth');
}
但是我不知道如何将参数传递给控制器。
我会感谢任何帮助。
5条答案
按热度按时间deyfvvtc1#
您可以访问url参数到中间件,如下所示:
routes.php
测试控制器
测试中间件
**不要忘记更新Kernel.php以激活中间件
xyhw6mcr2#
不要把中间件放在控制器中。尽可能多地将业务逻辑排除在控制器之外。
相反,创建您的中间件文件。
现在,在文件中找到
$handle
函数。只需在请求和闭包之后添加参数
现在,
$role
将包含role:value
的值,在您的示例中,该值为$editor
cgh8pdjw3#
@muhammad-sumon-molla-selim的答案实际上是根据问题最好的答案,但它泄漏到解释中。
根据我的知识,我能够遵循他的指导方针,所以这里是一个完整的例子加上一个用例,其中路由的中间件或请求参数是不可能的。
我有一个抽象的CRUDControllerBase,它由许多子控制器扩展。每个子控制器需要不同的权限来执行模型上的任何操作,除了index/show。
因此,我被迫动态地将权限(字符串)从控制器传递到中间件,下面是基本结构:
下面是我如何处理这个问题的@muhammad-sumon-molla-selim的回答:
yvgpqqbh4#
我已经解决了这个问题,用这个:
在中间件中:
w80xi6nr5#
如果你想在控制器的__结构中获取参数,你可以这样做: