根据documentation,中间件可能参数化在 routes 文件中带有静态值:
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
如果我需要传递服务该怎么办?
我这样做的动机是避免使用Facades,因为即使它们应该是可模仿的,我在第一次尝试时已经遇到了问题。 Mockery / mockery做了一些疯狂的评估,我不打算调试它。本质上,一些类被声明两次并且PHP chokes具有致命错误。这可能是因为我错误地遵循了这个例子,但让我们把它留在那里。我不想依赖外墙。
我不想了解为什么Facades很棒,因为构造函数中的依赖声明足以让我开心。
我尝试了跟踪路由动作,但我无法理解Route :: parseAction($ action)中发生了什么。中间件在哪里实例化?是否有标准的方法将对象传递给middewares?
答案 0 :(得分:1)
如果您希望将服务传递给中间件,则需要将其声明为中间件构造函数的依赖项。作为示例,请查看Laravel应用程序中默认存在的 RedirectIfAuthenticated 中间件 - 它将获取 Guard 对象,您也可以通过 Auth访问该对象门面。
class RedirectIfAuthenticated
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
*
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
//rest of the code