2011-07-17 5 views

答えて

12

要求がマスタであるかどうかを検出するには、コントローラに注入する必要があるRequestStackを使用する必要があります。要求スタックは、現在の要求がマスターである場合getParentRequest()は常にnullを返します3つの便利な方法

getCurrentRequest(); 
getMasterRequest(); 
getParentRequest(); 

を持っています。

0

簡単には、ちょうどあなたのRequestオブジェクトにgetMethod()メソッドを呼び出します。

$method = $this->get('request')->getMethod(); 

これは、例えば、現在の要求のHTTPメソッドを返します。 GET,POST,PUTまたはDELETEである。

+3

Noo。私は:このリクエストマスターかサブリクエストですか? – Koc

+17

ああ、申し訳ありません。この場合、 'kernel.request'イベントにフックし、' $ event-> getRequestType() 'が' HttpKernelInterface :: MASTER_REQUEST'または 'HttpKernelInterface :: SUB_REQUEST'と等しいかどうかを確認する必要があります。 – igorw

+0

@ gorw、あなたは更新して、あなたがあなたのコメントに投稿した回答を投稿し、upvotedすることができます。人々は質問に答えることのできない答えをあきらめない。 – Quentin

2

私はこれを自分で探していましたが、周りを回っているようですので、それが何であるかを知る単一の場所ではないようです。

これを解決するための私の考えは、要求に属性を追加するだけの単純なkernel.requestリスナーを作成することです。下のラフ(未テスト)コード:

public function onKernelRequest(GetResponseEvent $event) 
{ 
    $event->getRequest()->attributes->set('_request_type', $event->getRequestType()); 
} 

次にコントローラにあなたが行うことができるはず:

$requestType = $this->getRequest()->attributes->get('_request_type'); 

これもテストされていません。完全なリスナークラスを書き、それをサービス設定ファイルに追加する必要がありますが、それ以外の場合はこれがうまくいくと思います。

関連する問題