14

リスナーでさえページロードでルートを取得するにはどうすればよいですか?

services.ymlに次のコードがあります:

    page_load_listener:
    class: Acme\MainBundle\EventListener\PageLoadListener
    arguments: [@security.context, @session]
    tags:
        - { name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 64 }

PageLoadListenerクラスには、対応するメソッドがあります。

    public function onKernelController(FilterControllerEvent $event)
    {

        // Some code I need to execute that needs the route arguments

    }

問題は、ルートと引数が使用できないことのようです。私は何が欠けていますか?

ルートとその引数を取得するには、どのイベントを通過する必要がありますか?

ありがとう、

JB

4

1 に答える 1

39

すべてのカーネルイベントは拡張されます。つまり、を介してオブジェクトにアクセスKernelEventするだけです。Request$event->getRequest()

public function onKernelController(FilterControllerEvent $event)
{
    $request = $event->getRequest();

    // Matched route
    $_route  = $request->attributes->get('_route');

    // Matched controller
    $_controller = $request->attributes->get('_controller');

    // All route parameters including the `_controller`
    $params      = $request->attributes->get('_route_params');
}

プレーンなルート属性を取得する場合は、接頭辞「_」が付いているすべての要素を除外するだけです。

リッスンする適切なイベントの選択は、特定のユースケースによって異なります。

于 2012-07-16T14:08:21.240 に答える