Symfony 4 Event Dispatcher - 是否有一些解决方案如何使用 Event Dispatcher 过滤值? (类似于 wordpress "add_filter" 函数)
Symfony 4 Event Dispatcher - is there some solution how to filter value with Event Dispatcher? (like wordpress "add_filter" function)
是否有一些解决方案如何使用 Symfony 事件调度程序过滤 value/values,就像 wordpress 和 add_filter returns 过滤值一样?
也许在事件中存储属性并使用订阅者编辑它们?
你提出的方案是我能想到的最好的方案。没有旨在 post-process WordPress 过滤器或 Joomla 插件中的值的“本机”机制。
如果您发送一个自定义事件并填充您想要“过滤”的对象,您可以轻松地添加一个订阅者来执行您想要的操作。由于对象总是通过引用传递,因此对对象的任何更改都将在控制器中传播。
例如
控制器:
$product = $this->productRepository->get($someId);
$this->eventDispacther->dispatch(
BeforeDisplayEvent::class,
new BeforeDisplayEvent($product)
)
return $this->render('product.html.twig', ['product' => $product]);
订阅者:
public function alterProduct(BeforeDisplayEvent $event)
{
$product->setSomething($this->yourFilter($product));
}
是否有一些解决方案如何使用 Symfony 事件调度程序过滤 value/values,就像 wordpress 和 add_filter returns 过滤值一样? 也许在事件中存储属性并使用订阅者编辑它们?
你提出的方案是我能想到的最好的方案。没有旨在 post-process WordPress 过滤器或 Joomla 插件中的值的“本机”机制。
如果您发送一个自定义事件并填充您想要“过滤”的对象,您可以轻松地添加一个订阅者来执行您想要的操作。由于对象总是通过引用传递,因此对对象的任何更改都将在控制器中传播。
例如
控制器:
$product = $this->productRepository->get($someId);
$this->eventDispacther->dispatch(
BeforeDisplayEvent::class,
new BeforeDisplayEvent($product)
)
return $this->render('product.html.twig', ['product' => $product]);
订阅者:
public function alterProduct(BeforeDisplayEvent $event)
{
$product->setSomething($this->yourFilter($product));
}