作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Symfony 2 制作一个项目,我需要在 Zend 中使用类似 preDispatch 的方法,该方法将在 Controller 中的任何操作之前调用。我是 Symfony 的新手,稍微上网了一下,我发现在旧版本的 Symfony 中有一个 preExecute 方法,但现在它不见了。我可以用什么来解决我的问题?
提前致谢。
最佳答案
正如@Arms 建议我的那样,我已经开始探索 Symfony 2 的事件机制。所以现在我要写下代码,它解决了我的问题(我在 YAML 中做的所有配置,但你可以做XML 或 PHP 格式)。
首先你需要在Symfony配置中描述你想监听什么样的事件以及当事件发生时内核应该调用什么。为此,打开配置文件 app\config\config.yml 并添加以下代码:
services:
younamespace.yourbundle.listener.preexecute:
class: Location\Of\Your\Listener\Class
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
您的类应按以下方式实现 onKernelController 方法:
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();
}
}
}
}
此后每次在 Controller 中创建 preExecute 方法时,都会在执行任何操作之前调用它,因此您可以在该方法中做很多事情,比如初始化变量,或者在写入 DB 之前进行一些检查等等上。
详细配置也可以看here (此示例针对 kernel.request 事件,但它可以帮助您理解)
玩得开心;)
关于php - 如何在 Symfony2 中创建类似 Zend preDispatch 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293075/
我是一名优秀的程序员,十分优秀!