1

私は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]

このアクションを実行するには、ユーザーがログインする必要があるため、モジュールの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.php、そのexecuteSignin方法)を参照してください。

sfGuardユーザーリファラーを取得し、sfActionの適切なメソッドを使用してリダイレクトを実行します。このリダイレクトは、httpヘッダーを使用して実行されLocationます。したがって、ブラウザはGETメソッドを使用してURLコンテンツを受信します。

デフォルトのアクションをオーバーライドして、ルートから、コンポーネントを使用してPOSTリクエストをエミュレートするアクションへのsigninリダイレクトを実行できますが、ルーティングスキームを変更することを強くお勧めします。remove_membershipsfBrowser

于 2011-07-28T14:20:38.030 に答える