Можно ли ввести параметр-параметр (или сегмент маршрута) в конструктор-контроллер?
Вы найдете код, чтобы уточнить мой вопрос.
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');
Их невозможно вводить, но у вас есть доступ ко всем из них через:
class TestController{ protected $_param; public function __construct() { $id = Route::current()->getParameter('id'); } }
Laravel 5.3.28
Вы не можете ввести параметр … Но вы можете ввести запрос и получить его из экземпляра маршрутизатора, например:
//route: url_to_controller/{param} public function __construct(Request $request) { $this->param = $request->route()->parameter('param'); }
В Laravel 5.4 вы можете использовать это, чтобы запросить параметр:
public function __construct(Request $request) { $id = $request->get("id"); }
Наконец, но самое главное, вы можете просто «набирать тип» зависимости от конструктора класса, который разрешен контейнером, включая контроллеры, прослушиватели событий, задания очереди, промежуточное программное обеспечение и т. Д. На практике это то, как большинство ваших объектов разрешается контейнером.