我在Symfony中有人和团体的应用程序,其中一个人可能拥有多个团体的成员资格。要从组中删除某个人,我目前在“groupMembers”模块中有一个操作,该模块采用“删除”方法并从多对多实体“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]
要执行此操作,用户需要登录,因此我在模块的security.yml中使用sfGuard限制它:
remove:
is_secure: true
因此,点击“删除”链接后,未登录的用户将被带到登录屏幕,但点击“提交”后,请求不再是“删除”而是“获取”,意思是而是调用类似的add_to_group路由!
add_to_group:
url: /group-membership/:group_id/:person_id
param: { module: groupMembers, action: create }
...
有没有办法让sfGuard模拟删除操作并正确传递参数,还是我必须使用不同的路径?
答案 0 :(得分:1)
如果没有编写自定义代码或编辑sfGuard插件代码,似乎无法实现这一目标。
有关如何处理登录的信息,请参阅plugins/sfGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.php
(其executeSignin
方法的详细信息)。
sfGuard
获取用户引荐来源并使用appropriate method of sfAction执行重定向。使用http标头Location
执行此重定向。因此浏览器将使用GET方法接收网址内容。
您可以覆盖默认signin
操作并执行从remove_membership
路由重定向到将使用sfBrowser
组件模拟POST请求的操作,但我强烈建议您更改路由方案。