1

イベントリスナーを使用してコードを実行しています。

namespace Acme\Bundle\NewBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class RequestListener
{

    public $value;

    public function onKernelRequest(GetResponseEvent $event)
    {

        $this->value = 1;   

    }

}

次の2つの場合に、クラスのプロパティ(私の例では$ valueのみ)にアクセスできる必要があります。

(a)ルートから実行される通常のコントローラ。

(b)Twigテンプレートから(Twigレンダリングコマンドを使用)。Twigはすべての要求に応じて実行されるため、これを行うためにTwigに何も渡したくありません。

...どうすればいいですか?オブジェクトのインスタンスを取得する必要があると思いますが、それを作成したイベントであるため、その方法がわかりません。

4

1 に答える 1

1

クラスのattributesフィールドRequestは通常、コードの他の部分で使用されるものを入力するために使用されます。たとえば、Symfonyリスナーの1つが_routeパラメーターを設定します。

$eventオブジェクトからリクエストを取得できます。

$request = $event->getRequest();
$request->attributes->set('value', 1);

次に、コントローラーから取得します。

public function someAction(Request $request)
{
    $value = $request->attributes->get('value');

    // shorter but a bit less effective
    $value = $request->get('value');
}

そして小枝で:

{{ app.request.attributes.get('value') }}

または、短くても効果が少し劣ります。

{{ app.request.get('value') }}

PSどうやって解決しようとしているのかではなく、何解決しようとしているのかを尋ねると、実際にはもっと効果的です。単純で一般的な慣用的な解決策の問題に対する複雑な非慣用的な解決策を思いつくかもしれません。

于 2013-03-16T16:19:54.733 に答える