2016-03-21 15 views
1

私のsymfonyプロジェクトでは、cronタスク(1日1回実行)のコマンドを作成しました。それはテーブルを変更し、そのテーブルは(Doctrine blameable listenerによる)updatedByプロパティを持ちます。 私はプログラムでユーザーをログする必要があります。 ここに私のコードです。リクエストなしでsymfonyイベントをディスパッチする方法

if ($this->container->get("security.context")->getToken() === null) { 
     $token = new UsernamePasswordToken($systemUser, null, "admin_area", $systemUser->getRoles()); 
     $this->container->get("security.context")->setToken($token); 
} 

私の問題は、このイベントをディスパッチする方法です。要求がないので、次のコードを使用することはできません。

$request = $this->container->get("request"); 
     $event = new InteractiveLoginEvent($request, $token); 
     $this->container->get("event_dispatcher")->dispatch("security.interactive_login", $event); 

get( "request")サービスはinsideコマンドを使用できません。 このイベントをディスパッチしてください。

答えて

0

- あなたは、一例としてcreate method経由でリクエストオブジェクトを作成することができます。

$request = Request::create("?foo=bar"); 

そして、イベントでそれを使用します。

$event = new InteractiveLoginEvent($request, $token); 

リクエストからいくつかのparamsを必要とする場合、私は知りません追加することができます(ドキュメントを参照)。

希望このヘルプ

+0

問題はまだあります。初めてコマンドを実行すると、updatedByフィールドが正しく入力されます。そのコマンドをもう一度実行すると、updatedByフィールドはnullで埋められます。 もう一度私はコマンドを実行する場合、それは正しくupdatedByフィールドを埋める。それは繰り返し発生します。私は発送しなかったので、それが起こったと思った。しかし、私は正確に何が問題なのか分かりません。 –

関連する問題