Skip to content

Instantly share code, notes, and snippets.

@okapon
Last active November 14, 2019 09:38
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okapon/fd2dfdacf87e417f7957 to your computer and use it in GitHub Desktop.
Save okapon/fd2dfdacf87e417f7957 to your computer and use it in GitHub Desktop.
PHPフレームワークでよくあるController実行前に処理を実行できる機能をSymfonyに持たせるサンプル
<?php
namespace My\BlogBundle\EventListener;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class BeforeFilterControllerListener
{
public function onKernelController(FilterControllerEvent $event)
{
$c = $event->getController();
$request = $event->getRequest();
if (!is_array($c)) {
return;
}
$controller = $c[0];
// コントローラー実行前になにか処理を実行する
if (method_exists($controller, 'before')) {
$controller->before($request);
}
}
}
@okapon
Copy link
Author

okapon commented Jul 25, 2014

Listenerの登録

# service.yml
services:
    my.blog.before_filter_controller_listener:
    class: My\BlogBundle\EventListener\BeforeFilterControllerListener
tags:
    - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

こういう感じで使える

class BlogController extends Controller
{
    public function before(Request $request)
    {
        // Actionが呼ばれる前に実行したい前処理がかける
    }
}

ただ、こういう前処理をコントローラー側に持たせる必要はないですね。
EventListener側に記述しましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment