我想拦截对Service方法的调用并在它之前执行一些代码。
例如,有人写道:
$this->container->get('file_locator')->isAbsolutePath($path);
我想拦截对 Symfony \ Component \ Config \ FileLocator :: isAbsolutePath()的调用,并在它之前执行一些代码。
这可能吗?
由于
答案 0 :(得分:0)
我不知道如何实现您正在寻找的目标,但我可以想到您应该能够使用两种方法来达到同样的效果:
然后你有两个选择:
您可以使用自己的服务覆盖服务,该服务扩展默认服务并覆盖isAbsolutePath()方法。
使用您自己的:
覆盖默认的FileLocator
课程
class MyCustomFileLocator extends FileLocator
{
public function isAbsolutePath()
{
// Your awesome code here...
return parent::isAbsolutePath();
}
}
覆盖服务定义:
# services.yml
# Just create a new definition with the same name
services:
file_locator:
class: MyCustomFileLocator
arguments: [...]
# Or alternatively, if you're overriding one of symfony/third bundle services,
# they often provide class parameter which can be overriden
parameters:
file_locator.class: MyCustomFileLocator
您可以使用service decoration techinque,这会产生相同的效果,但如果由于某种原因需要,您仍然可以将原始服务称为file_locator.inner
。