Php 如何在symfony 4中自动调用服务

Php 如何在symfony 4中自动调用服务,php,symfony,service,annotations,symfony4,Php,Symfony,Service,Annotations,Symfony4,我的项目中有一项服务 services: exemple.annotation_reader: class: App\Annotation\ModelAnnotationReader public: true arguments: ["@annotations.reader"] calls: - [getAnnotation] 我想调用methode“getAnnotation”,而不在控制器中添加这一行 $this->get('exemp

我的项目中有一项服务

services:
exemple.annotation_reader:
    class: App\Annotation\ModelAnnotationReader
    public: true
    arguments: ["@annotations.reader"]
    calls:
        - [getAnnotation]
我想调用methode“getAnnotation”,而不在控制器中添加这一行

$this->get('exemple.annotation_reader')->getAnnotation();
还有我的函数getAnnotation

public function getAnnotation(){
    $reflClass = new \ReflectionMethod('App\Manager\BigDataTestManager', 'getAllData');
    $classAnnotations = $this->reader->getMethodAnnotations($reflClass);

    foreach ($classAnnotations AS $annot) {
        if ($annot instanceof ModelAnnotation) {
            print_r($annot);
        }
    }
}
我的项目的目标是在symfony 4中创建一个自定义注释,我想显示注释的参数

/**
 * @Model(
 *     namespace="App\Model\Exemple",
 *     version=50,
 *     types={"json","xml"}
 * )
 */

因此,我想创建一个服务,当函数上有注释时,该服务会自动调用函数。

您始终可以在模型构造函数中调用
getAnnotation
,但我认为这不是一个好主意,在注册服务期间,您应该避免执行除属性初始化以外的任何操作。相反,试着将此委托给其他地方,也许
装饰器
模式能有所帮助?嗨,Beniamin,谢谢你的回复,但我还没有找到解决方案。例如,当我在任何函数上添加自定义注释时,我想启动一个事件,那么有解决方案吗?您想何时调用此服务?Symfony具有某些可以挂接的事件,例如
内核.request
。不过,每次阅读注释的成本可能相当高。您应该考虑使用缓存。也许可以看看Symfony的CacheWarmers,它在
cache:clear
/
cache:warmup
上被调用。您的注释在运行时不会更改,因此建议至少对prod envs和Symfony这样做。您好,dbrumann,我想在函数上有注释时调用该服务。symfony中是否有只在控制器上工作而不在任何功能上工作的事件?因为有kernel.controller,所以它允许我做我想要的事情,但只在控制器上,这就是问题所在。