【发布时间】:2015-12-12 18:22:10
【问题描述】:
根据documentation,中间件可以参数化在routes文件中使用静态值:
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
如果我需要传入一个服务怎么办?
我这样做的动机是避免使用 Facades,因为即使它们应该是可模拟的,但我在第一次尝试时就遇到了问题。 Mockery/mockery 做了一些疯狂的评估工作,我不想调试它。本质上,某些类被声明了两次,PHP 因致命错误而窒息。发生这种情况可能是因为我错误地遵循了这个例子,但让我们把它留在那里。我不想依赖 Facades。
我不想了解为什么 Facades 很棒,因为构造函数中的依赖声明足以让我开心。
我尝试遵循路由操作,但我无法理解 Route::parseAction($action) 中发生了什么。中间件在哪里实例化?是否有将对象传递给中间件的标准方法?
【问题讨论】:
-
顺便说一句,门面是不可模拟的,因为它有一个静态方法(不是我的代码!)而不是通过门面访问器委托给服务。
标签: php laravel dependency-injection laravel-5 middleware