通过sfGuard传递删除方法

时间:2011-07-28 11:57:33

标签: php symfony1 symfony-1.4 sfguard

我在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模拟删除操作并正确传递参数,还是我必须使用不同的路径?

1 个答案:

答案 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请求的操作,但我强烈建议您更改路由方案。