Основная проблема маршрутизации URL-адресов Symfony2

Я знаю, что мой вопрос очень... простой и понятный, но я все равно задам его: надеюсь, что кто-нибудь сможет мне подсказать.

Я переписываю веб-приложение PHP, используя Symfony2. Мне нужно выполнить операции CRUD над объектами базы данных (у которых есть первичный ключ и два других поля, называемые field1 и field2)

В моем старом веб-приложении я вспоминал этот URL:

  http://myhost/updateProduct.php?id=foo&field1=value1&field2=value2

вызвать скрипт updateProduct.php для обновления объекта с id=foo, установив значение1 для поля1 и значение2 для поля2.

Теперь я хочу использовать для этой работы контроллер Symfony2... Интересно, какую маршрутизацию мне для этого настроить. Мой контроллер ProductController, и он включает метод updateAction($id,$field1,$field2).

Я пробовал что-то вроде (синтаксис yml):

myBundle_update:
    pattern:  /product/update/{id}/field1={value1}&field2={value2}
    defaults: { _controller: TestMyBundle:Product:update } 

но это не работает.

Итак, мой вопрос: я ошибаюсь в синтаксисе маршрутизации (и если да, то какой правильный)? Или я что-то упускаю в том, как правильно разделить параметры запроса на контроллеры?

заранее спасибо


person csparpa    schedule 20.07.2011    source источник


Ответы (1)


Вероятно, вы хотите, чтобы ваш маршрут выглядел примерно так:

pattern:    /product/update/{id}/{value1}/{value2}

Таким образом, просто вызовите /product/update/1/fieldValue1/fieldValue2, чтобы обновить продукт.

Я не уверен, но, вероятно, у маршрутизации есть некоторые проблемы с вашим маршрутом, определяющим & в его маршруте.

Обновление: Ах, проблема, скорее всего, заключается в том, что у вас нет / между двумя вашими значениями. Symfony2 использует регулярное выражение [^/]+ как стандартное регулярное выражение для параметра.

http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html

person kufi    schedule 20.07.2011
comment
Шаблон, который вы упомянули, действителен, и я думал об его использовании. Но я хотел использовать какие-то удобные для пользователя URL-адреса, где имена полей можно было бы указать так или иначе. Нет ли способа избежать символов & и = в маршрутизации Symfony2? - person csparpa; 20.07.2011
comment
вы можете попробовать что-нибудь, чтобы добавить требование к шаблону, подобное этому: value1: [^&]+ Таким образом, он прекратит поиск, когда найдет первое & - person kufi; 20.07.2011
comment
& и = могут быть закодированы в процентах (%26 и %3D соответственно), и маршрут не будет нарушен, но маршрутизатор Symfony2 не будет им соответствовать (поскольку он попытается буквально сопоставить %26 и %3D). - person Adrian; 26.07.2011