-1

Symfony2で問題が発生しています。つまり、関数の使い方__construct()です。公式ドキュメントは驚くほど悪いです!

以下を使用できるようにしたいと思います。

public function __construct()
{
    parent::__construct();
    $user = $this->get('security.context')->getToken()->getUser();
}

ただし、次のエラーが発生します。

Fatal error: Cannot call constructor in /Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11

11行目はparent::__construct();です。私はそれを削除し、次の新しいエラーが発生しました

Fatal error: Call to a member function get() on a non-object in /Sites/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 242

DICを設定する必要があるかもしれないと思いますがContainerInterface、これを行う方法がわかりません(私は無残に試みて失敗しました)

アイデアはありますか?

4

2 に答える 2

4

これは実際、新しいS2開発者にとって非常に一般的な誤解です。@KingCrunchが言うように、S2コントローラーには構成がないため、アプローチは失敗します。ソースコードを見てください:namespace Symfony \ Bundle \ FrameworkBundle \ Controller \ Controllerそして、ControllerがsetContainerと呼ばれる1つのメソッドを持つコンポーネントContainerAwareを拡張していることがわかります。本当に必要な場合は、このメソッドをオーバーライドして、必要な処理を実行できます。

ただし、この種のことのために特別に設計されたイベントシステムがあります。つまり、アクションメソッドが開始される前に特定のメソッドを実行します。このトピックに関する他の質問を少し検索することをお勧めします。

S2.1コントローラーにgetUser()メソッドが追加されました。基本コントローラークラスに追加することをお勧めします。心配する必要はありません。

于 2012-08-08T14:55:54.510 に答える
1

どのクラスを拡張したかはわかりませんが、symfonyコントローラーにはコンストラクターがありません。したがって、それはまさに、メッセージが示唆するようにです

Fatal error: Cannot call constructor in
/Sites/src/DEMO/DemoBundle/Controller/Frontend/HomeController.php on line 11

Line 11 is "parent::__construct();"

コンストラクターが存在しないため、コンストラクターを呼び出すことはできません。

public function __construct()
{
    $user = $this->get('security.context')->getToken()->getUser();
}

注目に値するのは、クラスを拡張したり、インターフェースを実装したりする必要さえないということです。symfony2-controllerは完全に独立したスタンドアロンクラスにすることができます。

公式ドキュメントは驚くほど悪いです!

ドキュメントは、親コンストラクターを呼び出すことをどこに提案していますか;)

于 2012-08-08T07:57:09.570 に答える