有谁知道为什么不能在 Laravel 5 中使用控制器方法注入来使$router单例在控制器方法中可用,如下面的代码所示?
use IlluminateRoutingRouter;
class WelcomeController extends Controller {
// ...
public function test($name = 'default var value', Router $router)
{
// stuff like taking the {name} part of /say-hello-to/{name?}
// ...using $router->input('name') for example
// ...assuming a route like: Route::get('say-hello-to/{name?}', 'WelcomeController@test')
}
}
获得相同内容的另一种方法(对控制器方法中的 url 部分的惯用访问)很有用,但我已经想到了一种方法来做到这一点,我主要感兴趣的是为什么这不仅有效,因为我试图得到的是更深入地了解 Laravel 的工作原理以及在使用它时可以强调哪些高级模式。
好吧,我第一次想到删除这个是在我自己在 ~5 分钟内想出答案后,但话又说回来,也许写这个让其他人能够谷歌
:将可选 URL 参数(如 'test/{name?}'
)与控制器方法注入相结合时,始终将注入的参数放在方法声明中具有默认值的参数之前,否则在访问没有可选参数的 URL 变体时,您最终会盯着一些非常令人困惑的错误。
因此,在上面的示例中,它应该是:
public function test(Router $router, $name = 'default var value')
。而不是:
public function test($name = 'default var value', Router $router)
而且,顺便说一句,如果比我更有经验的人遇到这种情况,如果您认为这是一个应该报告给开发人员的 Laravel 5 错误,或者如果您认为这是这种情况的预期行为,请发表评论。