Можно ли передать параметр маршрута в конструктор контроллера в Laravel?

Можно ли ввести параметр маршрута (или сегмент маршрута) в конструктор-контроллер?

Вы найдете код, чтобы уточнить мой вопрос.

class TestController{

    protected $_param;

    public function __construct($paramFromRoute)
    {
        $this->param = $paramFromRoute;
    }

    public function testAction()
    {
        return "Hello ".$this->_param;
    }
}

----------------------------------------------------

App::bind('TestController', function($app, $paramFromRoute){
    $controller = new TestController($paramFromRoute);
    return $controller;
});

----------------------------------------------------

// here should be some magic
Route::get('foo/{bar}', 'TestController'); 

Ответы

Ответ 1

Невозможно их вводить, но у вас есть доступ ко всем из них через:

class TestController{

    protected $_param;

    public function __construct()
    {
        $id = Route::current()->getParameter('id');
    }

}

Ответ 2

Laravel 5.3.28

Вы не можете вводить параметр... Но вы можете ввести запрос и получить его из экземпляра маршрутизатора, например:

//route: url_to_controller/{param}
public function __construct(Request $request)
{
   $this->param = $request->route()->parameter('param');
}

Ответ 3

В Laravel 5.4 вы можете использовать это, чтобы запросить параметр:

public function __construct(Request $request) {
   $id = $request->get("id");
}

Ответ 4

Наконец, но самое главное, вы можете просто "набросать" намек на зависимость в конструкторе класса, который разрешен контейнером, включая контроллеры, прослушиватели событий, задания очереди, промежуточное ПО и т.д. На практике это то, как большинство ваших объектов разрешаются контейнером.

http://www.golaravel.com/laravel/docs/5.1/container/