2012-05-11 3 views
1

何らかの方法でコントローラデータを前処理する方法はありません。私はセッションからparamを取って、それを検証し、それをコントローラーのプロパティとして割り当て、いくつかのコントローラーのアクション内、または可能ならば$ this-> myVarとして使用するつもりです。コントローラのコンストラクタを使用すると何も表示されず、リクエストとセッションのデータにアクセスできませんでした。ありがとう!すべてのsymfony2コントローラにカスタムプロパティを追加

UPD: ありがとう、jkucharovic、非常に良い解決策。 また、$ controller = new Controller();の直後に呼び出されたsetContainer()メソッドも、注入することなく少し汚れたソリューションがあります。

use Symfony\Component\DependencyInjection\ContainerAwareInterface, 
    Symfony\Component\DependencyInjection\ContainerInterface; 

class AppServiceController extends Controller { 
private $my_property; 

/** 
    * Used as constructor 
    */ 
public function setContainer(ContainerInterface $container = null) 
{ 
    parent::setContainer($container); 
    $this->my_property = 'foo'; 
    // your controller code 
} 
} 

答えて

1

__constructメソッドでサービスを使用する場合は、まずinject that servicesにする必要があります。その後、他の方法の前に使用することができます。例:

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Session; 

public function __construct(Request $request, Session $session) 
{ 
    … 
} 
+0

私はそれについていくつかの詳細を得ることができますか? – Tauquir

+0

もちろん:-_)_ – jkucharovic

+0

こんにちは。私はSymfony2.5と全く新しいものを使用しています。私があなたの答えを実装すると、次のエラーが発生します。 'キャッチ可能な致命的なエラー:引数1がFried \ FrameworkBundle \ Controller \ SectionController :: Controllerに渡されました:: __ construct()はSymfony \ Component \ HttpFoundation \ Requestのインスタンスでなければなりません。私はルートを通らなければならないかもしれないと信じています。私は間違っているかもしれません。コントローラーで2つの変数をどのように渡すことができますか教えてください。ありがとう。 – Nis

4

私はあなたがしなければならないことは非常に便利です。コントローラインスタンスは、コントローラが呼び出されるたびに作成されます。セッションと要求は、コントローラに電話をかけるたびに異なります。

Controllerクラスを拡張してセッション内のMyVar値にアクセスするためのショートカットメソッドを使用して、BaseControllerクラスを作成する必要があります。

class BaseController extends Controller 
{ 
    public function getMyVar() 
    { 
     return $this->get('session')->get('MyVarSessionKey'); 
    } 
} 

あなたのすべての他のコントローラは、このBaseControllerから延長されます。

ControllerクラスController::getRequest()で提供されるショートカットメソッドを使用するだけでリクエストを取得できます。

関連する問題