【问题标题】:Inject router into controller method in Laravel 5在 Laravel 5 中将路由器注入控制器方法
【发布时间】:2014-12-07 13:39:45
【问题描述】:

有谁知道为什么不能在 Laravel 5 中使用控制器方法注入来使 $router 单例在控制器方法中可用,如下面的代码所示?

use Illuminate\Routing\Router;

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 的工作原理以及使用它时可以采用哪些高级模式

【问题讨论】:

    标签: php laravel dependency-injection laravel-5


    【解决方案1】:

    好的,在我自己在大约 5 分钟内找到答案后,我首先想到要删除它,但话又说回来,也许最好写这个让其他人能够谷歌:

    在将可选的 URL 参数(如 'test/{name?}')与控制器方法注入结合时,始终将注入的参数放在方法声明中具有默认值的参数之前,否则您最终会盯着一些访问不带可选参数的 URL 变体时出现相当混乱的错误。

    所以,在上面的例子中,它应该是:

    public function test(Router $router, $name = 'default var value')

    ...而不是:

    public function test($name = 'default var value', Router $router)

    顺便说一句,如果有人比我更熟悉 Laravel,如果你认为这是 Laravel 5 的错误应该报告给开发人员,或者你认为这是这种情况下的预期行为,请发表评论.

    【讨论】:

    • 你确定吗?这没有意义。它应该像第一个形状。
    • 这在预期的行为中。如果参数中没有特定的顺序,框架将更难猜测什么是应该注入的东西,什么只是一个路由参数。实现这一点并非不可能,但似乎额外的逻辑不值得。 免责声明:我不是 Laravel 开发团队的一员,所以这仅基于我的经验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2016-08-18
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多