将路由器注入 Laravel 5 中的控制器方法



有谁知道为什么不能在 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 错误,或者如果您认为这是这种情况的预期行为,请发表评论。

最新更新