Symfony2コントローラでコンストラクタを定義する方法を教えてください。私は、私のコントローラのすべてのメソッドで利用可能なログインユーザデータを取得したい、現在私はログインユーザを取得するために私のコントローラのすべてのアクションでこれを行う。あなたがイベントリスナーを添付することができ、すべてのコントローラのアクションの前にコードを実行するための一般的な解決のためにすべての私の行動Symfony2コントローラのコンストラクタ
8
A
答えて
12
で利用可能な私は、ユーザーにコンストラクタで一度それを行うと、これがログに記録したい
$em = $this->getDoctrine()->getEntityManager("pp_userdata");
$user = $this->get("security.context")->getToken()->getUser();
kernel.controller
イベントそのよう:次に
<service id="your_app.listener.before_controller" class="App\CoreBundle\EventListener\BeforeControllerListener" scope="request">
<tag name="kernel.event_listener" event="kernel.controller" method="onKernelController"/>
<argument type="service" id="security.context"/>
</service>
でごBeforeControllerListener
あなたはそれがない場合は、あなたがインターフェイスからメソッドを呼び出し、秒で通過し、インタフェースを実装するかどうかを確認するために、コントローラをチェックします誠実な文脈。
use App\CoreBundle\Model\InitializableControllerInterface;
class DefaultController implements InitializableControllerInterface
{
/**
* Current user.
*
* @var User
*/
private $user;
/**
* {@inheritdoc}
*/
public function initialize(Request $request, SecurityContextInterface $security_context)
{
$this->user = $security_context->getToken()->getUser();
}
// ....
}
インタフェース
namespace App\CoreBundle\Model;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\SecurityContextInterface;
interface InitializableControllerInterface
{
public function initialize(Request $request, SecurityContextInterface $security_context);
}
以外の何ものでもありません:そうは次のように
<?php
namespace App\CoreBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Security\Core\SecurityContextInterface;
use App\CoreBundle\Model\InitializableControllerInterface;
/**
* @author Matt Drollette <[email protected]>
*/
class BeforeControllerListener
{
protected $security_context;
public function __construct(SecurityContextInterface $security_context)
{
$this->security_context = $security_context;
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if (!is_array($controller)) {
// not a object but a different kind of callable. Do nothing
return;
}
$controllerObject = $controller[0];
// skip initializing for exceptions
if ($controllerObject instanceof ExceptionController) {
return;
}
if ($controllerObject instanceof InitializableControllerInterface) {
// this method is the one that is part of the interface.
$controllerObject->initialize($event->getRequest(), $this->security_context);
}
}
}
その後、ユーザーが常に利用可能にしたいすべてのコントローラは、あなただけのそのインターフェイスを実装し、ユーザーを設定しますこれに
2
私のアプローチがあった。
- 空のインターフェイスInitializableControllerInterface
- は、お使いのコントローラの追加
namespace ACMEBundle\Event; use Symfony\Component\HttpKernel\Event\FilterControllerEvent; class ControllerConstructor { public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); if (!is_array($controller)) { // not a object but a different kind of callable. Do nothing return; } $controllerObject = $controller[0]; if ($controllerObject instanceof InitializableControllerInterface) { $controllerObject->__init($event->getRequest()); } } }
- のためのイベントリスナーを作成してください:
class ProfileController extends Controller implements InitializableControllerInterface { public function __init() { $this->user = $security_context->getToken()->getUser(); }
そして、あなたはの$ this - を取得することができます>それぞれの行動のユーザー。
よろしく
3
私は少し遅れrunnigんだけど、コントローラであなただけのユーザーにアクセスすることができます:2.1
関連する問題
- 1. Spring MVCコントローラのコンストラクタ
- 2. Asp.Net Mvcコントローラの静的コンストラクタ
- 3. ASP.net MVCコントローラ - コンストラクタの使用
- 4. symfony2:コントローラ内のアクション/ルートへのフルパス
- 5. 私は、次のSymfonyコントローラ持っSymfony2のコントローラ/ビューで
- 6. Symfony2コントローラのスワップが機能しない
- 7. symfony2コントローラのmysqlコマンドを呼び出す
- 8. symfony2に似たコントローラへのカスタムPHP URL
- 9. Symfony2の主な要求部分コントローラ
- 10. symfony2ルートパラメータの取得(コントローラ引数とリクエスト)
- 11. Symfony2 dev envコントローラのswiftmailer例外をキャッチ
- 12. Symfony2コントローラの外部にあるセッションデータ
- 13. ASP.NETのWeb APIは、コントローラのコンストラクタ
- 14. ASP.Net MVCコントローラのコンストラクタのセッションnull
- 15. Symfony2:urlクエリーストリングパラメータをコントローラに渡すには?
- 16. のJavaFX FXMLコントローラ - initializeメソッドVSコンストラクタ
- 17. Symfony2の最初のコントローラが、私はCでSymfony2の2.7をインストールした404
- 18. Symfony2のは、私は私のコントローラ内のアクションを実行したいコントローラ
- 19. Symfony2の別のバンドルのルーティングとコントローラを使用
- 20. symfony2コントローラの機能テスト:ルートの生成方法
- 21. Symfony2サービスの作成後、コントローラの前で起動されるイベント
- 22. symfony2のコントローラからフィールド固有のエラーを追加する
- 23. Symfony2のサービスコンテナ - 私はこの<code>Paginator</code>クラスのコンストラクタを持っているサービスのコンストラクタ
- 24. ajax投稿要求symfony2コントローラのデータを処理します
- 25. symfony2のコントローラからエスケープ関数を呼び出す方法
- 26. Symfony2コントローラ内のAjaxでエラーを処理する
- 27. コントローラsymfony2の役割を取得するFOSUserBundle
- 28. Symfony2:すべてのアクションでコントローラ/ファイルを呼び出す
- 29. symfony2のライブラリからコントローラ/ i18nオブジェクトを取得するには?
- 30. すべてのsymfony2コントローラにカスタムプロパティを追加
誰かが書き込みをする方法を知っているので、
が働いれるべきyamlで設定しますか?私たちはyamlを使用しています。引数を追加する方法はわかりません。私はこれを読んでいます:http://symfony.com/doc/current/cookbook/service_container/event_listener.htmlもちろん助けなしで – Toskan
@トスカンあなたはちょうど 'argument @ [@em"、 "@" some_service "]' – takeit
app.listener.constructor_listener: クラス:AppBundle \のEventListener \ ConstructorListener 範囲:要求 引数: - {タイプ:サービスID:security.context} タグ: - {名:kernel.event_listener 、イベント:kernel.controller、メソッド:onKernelController} http://pastebin.com/NTySb68a – r4ccoon