Php 自定义过滤器/钩子/事件监听器-如何?
我希望实现:Php 自定义过滤器/钩子/事件监听器-如何?,php,oop,symfony,Php,Oop,Symfony,我希望实现: 听myController->myAction()和 调用myService->myModification()(之前) 过滤/修改$item(listenToMyFilterBefore/listenToMyFilterAfter) 下面是伪代码。似乎是和的混合体。什么是好的做法 class myController() { public function myAction() { $item = new Item();
- 听
和myController->myAction()
- 调用
(之前)myService->myModification()
- 过滤/修改
($item
/listenToMyFilterBefore
)listenToMyFilterAfter
class myController() {
public function myAction() {
$item = new Item();
$item = registerFilter('listenToMyFilterBefore', $item); // possibility to prepare before
// ... some modification ...
$item = registerFilter('listenToMyFilterAfter', $item); // possibility to modify after
// ...
}
}
class myService {
public function myModification() {
// listen to "myController->myAction"
$item = filter('listenToMyFilterBefore', function($item) {
$item->setLockMe(true);
});
$item = filter('listenToMyFilterBefore', function($item) {
$item->setLockMe(false);
$item->setSomeValue('myValue');
});
}
}
谢谢 我认为标准Symfony2事件适合您的需要:监听器
KernelEvents::CONTROLLER
在控制器执行之前调用,以及KernelEvents::VIEW
在控制器执行之后调用
也适用于FrameworkExtraBundle。它将帮助您在控制器代码之前获取项目的实例。您的侦听器可以在ExtraListeners之后立即获取
控制器不必返回响应
实例。如果您将返回项
,则将调度内核事件::视图
事件。您可以在相应的侦听器中处理项
,并返回响应
。查找类似楼层的FOSRestBundle
和viewsresponselistner
。
如果这还不够,您还可以应用AOP
方法。
使myService成为一项服务:并从您的控制器访问它。