我是 Laravel 5 的绝对初学者。
我创建了一个名为 BeforeMiddleware 的中间件类,该类的蓝图如下。
class BeforeMiddleware {
public function handle($request, Closure $next, $role)
{
if($request->user()->hasRole($role)){
return redirect('/pensions');
}
return $next($request);
}
}
在 kernel.php 中注册为
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'role' => 'App\Http\Middleware\BeforeMiddleware',
];
用户模型如下
class User extends Model {
public function hasRole($name)
{
return ($this->role->name == $name) ? true : false;
}
public function role()
{
return $this->belongsTo('App\Models\Role');
}
}
routes.php 中的用法如下。
Route:get('/reporting', [ 'middleware' => 'role:Owner', 'uses' => function(){
return 'secret data only be viewable by the owners';
}]);
如果我在浏览器中打开它/reporting
,我会收到以下错误。
ReflectionException in Container.php line 776:
Class role:Owner does not exist
但是如果我在中间件中硬编码'Owner'
并删除$role
参数,并将其从现在看起来像的路由中删除这个。
BeforeMiddleware.php
class BeforeMiddleware {
public function handle($request, Closure $next, $role)
{
if($request->user()->hasRole('Owner')){
return redirect('/pensions');
}
return $next($request);
}
}
路线.php
Route:get('/reporting', [ 'middleware' => 'role', 'uses' => function(){
return 'secret data only be viewable by the owners';
}]);
它按预期工作...
因此我的问题是在使用中间件控制路由时如何传递该参数
有什么想法吗?
最佳答案
如果您仔细阅读Middleware Documentation ,你会注意到这一行
Middleware parameters may be specified when defining the route by separating the middleware name and parameters with a :. Multiple parameters should be delimited by commas
因此,在您的情况下,如果您的中间件类名为 BeforeMiddleware
,中间件定义的第一部分应该是 before
,然后是 :
,然后是 :
您可以定义路由参数,用逗号分隔,如下所示:
Route:get('/reporting', [ 'middleware' => 'before:Owner', 'uses' => function(){
return 'secret data only be viewable by the owners';
}]);
关于php - 带参数的 Laravel 5 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822071/