Передача метода удаления через sfGuard - PullRequest
1 голос
/ 28 июля 2011

У меня есть приложение с людьми и группами в Symfony, где человек может иметь членство в нескольких группах.Чтобы удалить человека из группы, в настоящее время у меня есть действие в модуле «groupMembers», которое использует метод «delete» и удаляет пару из сущности «многие ко многим» group_membership.В настоящее время маршрут выглядит примерно так:

remove_membership:
  url:      /group-membership/:group_id/:person_id
  class:    sfPropelRoute
  options:  { model: GroupMembership, type: object }
  param:    { module: groupMembers, action: remove }
  requirements:
    sf_method: [delete]

Чтобы выполнить это действие, пользователь должен войти в систему, поэтому я ограничил его с помощью sfGuard в security.yml модуля:

remove:
  is_secure: true

Таким образом, после нажатия на ссылку «удалить», пользователь, который не вошел в систему, попадает на экран входа в систему, но после нажатия «отправить», запрос больше не является «удалить», а «получить», что означаетВместо этого вызывается аналогичный маршрут add_to_group!

add_to_group:
  url:    /group-membership/:group_id/:person_id
  param:  { module: groupMembers, action: create }
  ...

Есть ли способ заставить sfGuard эмулировать действие удаления и правильно передать параметры, или мне придется использовать другой маршрут?

1 Ответ

1 голос
/ 28 июля 2011

Кажется, что нет способа достичь этого без написания пользовательского кода или редактирования кода плагина sfGuard.

См. plugins/sfGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.php (его метод executeSignin для подробной информации), как обрабатывается вход.

sfGuard получает реферер пользователя и выполняет перенаправление с соответствующим методом sfAction . Это перенаправление выполняется с использованием http заголовка Location. Таким образом, браузер будет использовать метод GET для получения содержимого URL.

Вы можете переопределить действие signin по умолчанию и выполнить перенаправления с маршрута remove_membership на действие, которое будет использовать компонент sfBrowser для эмуляции запроса POST, но я настоятельно рекомендую вам изменить схему маршрутизации.

...