繁体   English   中英

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

[英]Inject router into controller method in Laravel 5

有谁知道为什么不能在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的工作方式以及与其合作时可以熟练使用的先进模式的更深理解

好的,我在大约5分钟内自己找出答案后就首先考虑删除此内容,但是再说一次,也许最好为其他人写这个以便能够使用Google:

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

因此,在上面的示例中,应该是:

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

...代替:

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

而且,顺便说一句,如果有人对Laravel有比我更丰富的经验,请发表评论,如果您认为这是应该向开发人员报告的Laravel 5错误,或者您认为这是此类情况的预期行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM