Я, похоже, столкнулся с проблемой с Symfony 2, которую я раньше не видел (или, что более похоже, что-то действительно очевидное).Ошибка маршрутизации Symfony 2 при добавлении параметров
У меня был маршрут, который не принимал никаких параметров и отлично работал, соединившись с контроллером и отображая правильный вид. Затем я обновил маршрут принять один параметр, как так:
# Note routing
gibbo_dummy_notes_Add:
pattern: /notes/add/{notebook}
defaults: { _controller: GibboDummyBundle:Note:add, notebook: 0}
requirements:
_method: POST|GET
Однако если сейчас я пытаюсь получить доступ к этому маршруту notes/add/test
я получаю ошибку The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?
. Если я удалю параметр, он отлично работает notes/add
.
Эта настройка точно такая же, как и остальные маршруты, которые используют параметры в моем приложении.
Действие в контроллере определенно возвращает объект ответа. Если я помещаю die('test');
в начало действия и удаляю параметр из URL-адреса, я добираюсь до утверждения die и вижу «test», но если я добавлю параметр в URL-адрес, он покажет ошибку, поэтому его явно не дойдет до моего контроллера или действие при включении параметра, но насколько я могу сказать, что маршрут настроен правильно, и я не получаю ошибку с нормальным маршрутом, я бы ожидал увидеть, была ли проблема с URL-адресом.
Im запустить его в среде Dev, и я попробовал другие браузеры/очистили кэш и т.д. Действие внутри контроллера NoteController выглядит как
public function addAction($notebook)
{
$pageTitle = 'Note';
$form = $this->createForm(new NoteType(), null, array(
'validation_groups' => array('add')
));
$request = $this->getRequest();
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
/** @var $em \Doctrine\ORM\EntityManager */
$em = $this->getDoctrine()->getManager();
/** @var $note Note */
$note = $form->getData();
$note->setNotebook();
$em->persist($note);
$em->flush();
return $this->redirect($this->generateUrl('gibbo_dummy_note_View'));
}
}
return $this->render('GibboDummyBundle:Note:new.html.twig', array(
'pageTitle' => $pageTitle,
'form_add' => $form->createView(),
'selected' => 'codebooks'
));
}
Может кто-нибудь пролить некоторый свет о том, что я могу делать неправильно?
Мое предположение было бы, чтобы он соответствовал другой маршрут для странной причине. Вы можете пойти в профилировщик, чтобы узнать, какой маршрут он сопоставил с маршрутизатором! –
в корневом каталоге 'php app/console router: debug' искать маршрут и убедиться, что он идет в нужное место –
Спасибо за ответ router: debug ничего не показал: gibbo_codekeeper_notes_Add POST | GET/notes/add/{notebook } –