【问题标题】:Symfony2: Execute some code after every actionSymfony2:每次操作后执行一些代码
【发布时间】:2012-09-21 03:48:10
【问题描述】:

我最近在 Symfony2 中启动了一个项目,我需要在每个操作之前和之后运行一些方法以避免代码冗余(例如 Zend Framework 中的 preDispatch/postDispatch 和 Symfony1 中的 PreExecute/PostExecute)。

我创建了一个继承所有控制器的基类, 并注册了一个事件侦听器以在运行请求的操作之前运行控制器的 preExecute() 方法,但是在阅读了这里的大量文档和问题之后,我仍然找不到如何运行 postExecute()。

Foo/BarBundle/Controller/BaseController.php:

class BaseController extends Controller {
  protected $_user;
  protected $_em;

  public function preExecute() {
    $user = $this->get('security.context')->getToken()->getUser();
    $this->_user = $user instanceof User ? $user : null;
    $this->_em = $this->getDoctrine()->getEntityManager();
  }

  public function postExecute() {
    $this->_em->flush();
  }
}

Foo/BarBundle/Controller/FooController.php:

class FooController extends BaseController {
  public function indexAction() {
    $this->_user->setName('Eric');
    $this->_em->persist($this->_user);
  }
}

Foo/BarBundle/EventListener/PreExecute.php:

class PreExecute {
  public function onKernelController(FilterControllerEvent $event) {
    if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
      $controllers = $event->getController();
      if (is_array($controllers)) {
        $controller = $controllers[0];

        if (is_object($controller) && method_exists($controller, 'preExecute')) {
          $controller->preExecute();
        }
      }
    }
  }
}

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    对此here 进行了讨论,schmittjoh 的这个特定示例可能会引导您走向正确的方向。

    <?php
    
    class Listener
    {
        public function onKernelController($event)
        {
            $currentController = $event->getController();
            $newController = function() use ($currentController) {
                // pre-execute
                $rs = call_user_func_array($currentController, func_get_args());
                // post-execute
    
                return $rs;
            };
            $event->setController($newController);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多