duanping1920 2014-12-07 05:39
浏览 54
已采纳

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

Does anyone know why can't one use controller method injection in Laravel 5 to make the $router singleton available inside a controllers method, like in the code below?

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') 
    }
}

An alternative way to get the same thing (idiomatic access to an url part inside a controller method) is useful, but I've already thought of a way to do this and I'm mainly interested in why this doesn't just work, as what I'm trying to get is a deeper understanding of how Laravel works and what advanced patterns can one emply when working with it.

  • 写回答

1条回答 默认 最新

  • douyan4243 2014-12-07 06:03
    关注

    OK, I first thought about deleting this after I figured out the answer myself in ~5min, but then again, maybe it's better to write this for others to be able to google:

    When combining optional URL arguments (like 'test/{name?}') with controller method injection, always put the injected parameters before the ones with default values in the method declaration, otherwise you will end up staring at some pretty confusing errors when accessing the URL variant without the optional parameter.

    So, in the example above, it should have been:

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

    ...instead of:

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

    And, btw, if someone more experienced with Laravel than me comes across this, please comment if you think this is a Laravel 5 bug that should be reported to the developers, or if you think this is the intended behavior for such situations.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?