1

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

4

1 回答 1

1

如果不编写自定义代码或编辑 sfGuard 插件的代码,似乎没有办法实现这一点。

请参阅plugins/sfGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.phpexecuteSignin有关详细信息的方法)如何处理登录。

sfGuard获取用户推荐人并使用适当的 sfAction 方法执行重定向。此重定向是通过使用 http header 执行的Location。所以浏览器会使用 GET 方法来接收 url 内容。

您可以覆盖默认signin操作并执行从路由重定向remove_membership到将使用sfBrowser组件来模拟 POST 请求的操作,但我强烈建议您更改路由方案。

于 2011-07-28T14:20:38.030 回答