2011-06-30 7 views
4

symfonyのアクションへの直接アクセスを防ぐことは可能ですか?このアクションは「前方」のみでアクセス可能です。したがって、基本的に、リクエストが別のアクションから来ているかどうかを確認する方法です。symfony、forwardでアクセス可能なアクション

私はこれを達成しようとしています。最初のアクションは多くの検証を処理するため、失敗した場合でもそのアクションにとどまります。成功した場合、適切なアクションに転送されます。このアクションには安全な入力が必要です(最初のアクションから検証済み)。コードDRYを維持するために、第2の動作は、すべての入力を再度検証する必要はない。

なぜプライベートメソッドを使用してみませんか? 2番目のアクションはプラグインのようなもので、最初のものからどこに行くのかが決定され、そのアクションには他のアクション/テンプレートのセットがあります。 symfonyがすでに処理している多くのケースを処理しようとするのではなく、単純に転送する方が意味があります。リクエストで利用可能な

+1

これで達成したいことをさらに詳しく説明できますか?なぜアクセスできないアクションに進むのが私にとって意味をなさないのでしょうが、今のところユースケースは見つけられませんでした。 – Timo

+0

私は質問に説明を追加しました。すでに誰かに答えられました。ありがとうございます – jsgoupil

+0

私はあなたの "第二コントローラ"はサービスでなければならないと思います、多分あなたは将来それを試してみてください...あなたがそれを必要とするならあなた自身のサービスへのテンプレートサービス。 –

答えて

7

前のアクションの完全なURLを与えます。

1)ルーティングでは操作できないことを確認してください。ワイルドカードルートを使用している場合、これは難しくなりますが、アクションのURLを404ページに示すルートをいつでも追加できます。あなたのrouting.ymlにこのような何かを追加します。

disabled_action: 
    url: /disabledController/disabledAction 
    params: { module: default, action: error404 } 

2)あなたのアクションを実行すると、アクション・スタックを確認してください。アクションスタックは、どのアクションからリダイレクトされたかを知ることができます。 $this->getController()->getActionStack()を使用してアクション内でアクセスできます。 getSize()1(デフォルト設定)より大きい場合、転送されます。

+0

このソリューションは完璧です。あなたが提案した両方の方法が完全に働いています。なぜ私がこれをやっているのか尋ねるのではなく、質問に答える時間をとってくれてありがとう。 – jsgoupil

0

使用リファラーパラメータは

$要求 - > getReferer()あなたにこれを達成するために、複数の方法があります

+2

'$ request-> getReferer()'は、HTTPリクエストからREFERERヘッダーを返します。このヘッダーは「信頼できる」ことはできません。すべてのブラウザーがこのヘッダーを送信するとは限らず(ブラウザーに送信しないように構成することもできます)、簡単に偽装することもできます。 –

0

私はあなたがこれを達成しようとしているのが不思議です。あなたはこの行動に進む複数のアクセスポイントを持つことを望んでいますか?プライベートメソッド(デフォルトではWebにアクセスできない)を単純に定義し、別のアクションから直接呼び出すとどうなりますか?

+0

私は質問に説明を追加しました。すでに誰かに答えられました。ありがとう – jsgoupil

関連する問題