Настройка маршрута в Symfony с тем же URL, но разными методами HTTP и действиями контроллера - PullRequest
0 голосов
/ 24 октября 2011

У меня есть следующая конфигурация маршрутов в приложении Symfony:

label:
  url:          /label
  param:        { module: label, action: configure }
  requirements: { sf_method: get }

label_create:
  url:          /label
  param:        { module: label, action: create }
  requirements: { sf_method: post }

связано с executeConfigure и executeCreate действиями. Тогда у меня есть форма, настроенная таким образом:

<form action="<?php echo url_for('@label_create') ?>" method="POST">
  <?php echo $form->renderHiddenFields() ?>
  <input type="hidden" name="sf_method" value="post" />
  <!-- more stuff here -->
</form>

При отправке формы executeConfigure выполняется, хотя, насколько мне известно, маршрут, настроенный с помощью метода POST, должен этого избегать и выполняет executeCreate.

Как я могу различать эти два действия, сохраняя один и тот же URL?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 07 ноября 2011

У меня тоже была эта проблема, и я нашел ответ в старом сообщении на форуме (http://oldforum.symfony -project.org / index.php / t / 25750 /).

Если он полностью игнорирует метод запроса, то он, скорее всего, использует обычный sfRoute. Вам нужно использовать sfRequestRoute, чтобы сделать маршрутизацию «осведомленной о методе». Итак, в вашем примере вы будете делать:

label:
  url:          /label
  class:        sfRequestRoute
  param:        { module: label, action: configure }
  requirements: { sf_method: get }

label_create:
  url:          /label
  class:        sfRequestRoute
  param:        { module: label, action: create }
  requirements: { sf_method: post }
0 голосов
/ 17 октября 2014

Я решил, используя этот маршрут:

users_create:
    pattern:     /
    defaults: { _controller: "RentalAPIBundle:User:create" }
    requirements: { _method: post }

users:    
    pattern:     /    
    defaults: { _controller: "RentalAPIBundle:User:index" }    
    requirements: { _method: get }

тогда при вызове URL вы можете либо вызвать пользователя или пользователя / для GET, но только пользователей / для POST. Я не могу сказать почему, но это работает

...