Я просто дополню ответ, предоставленный @ scube.
Прежде всего, вы не должны передавать объект Request
непосредственно в функцию действия вашего контроллера. Причина в том, что аргументы в функциях такого типа (функции, используемые в качестве действий в контроллере) используются исключительно с целью преобразования части URL в аргументы. Например, если у меня есть аннотация типа @Route(/blog/{year}/{month}/{day)
, то для заполнения аргументов вам нужна функция действия, подобная этой:
public function blogViewAction($year, $month, $day) {
// ...
}
Таким образом, $year
будет заполнен аргументом year
из URL, $month
- month
и $day
- day
. Имя переменной в URL-адресе должно совпадать с именем вашего аргумента.
Если вы хотите использовать объект запроса и находитесь в контроллере, вы запрашиваете его из контейнера внедрения зависимостей следующим образом:
$request = $this->get('request');
Это способ определения действия в контроллере. Ваше определение вашего маршрута должно выглядеть так же, как @scube сказал:
/**
* @Route("/thing/add/{id}", name="addThing")
*/
public function addThing($id) {
// ...
}
Убедитесь, что ваш маршрут зарегистрирован в Symfony2, введя php app/console router:debug
. Это напечатает все маршруты, известные фреймворку в вашем проекте. Убедитесь, что имя addThing
там и что отображение URL-адреса хорошее.
Наконец, даже если модификаторы области видимости не являются обязательными (public
, protected
, private
), поскольку public
является значением по умолчанию, рекомендуется всегда указывать его.
Надеюсь, это поможет.
С уважением,
Matt