【问题标题】:How does Symfony know where to find the services.yml config file?Symfony 如何知道在哪里可以找到 services.yml 配置文件?
【发布时间】:2015-12-30 21:53:37
【问题描述】:

在 Symfony 3.0(我相信 2.X 也是如此)中,如果我想创建一个带有依赖项的自定义约束验证器,我必须将该验证器注册为依赖注入容器中的服务(描述默认情况下,在 project_directory/app/config/services.yml) 中使用特殊标签(如 here 所述)。

这意味着 Validator 组件必须知道在哪里寻找服务容器。 ControllerResolver 也会出现这个问题。由于控制器可以注册为服务,ControllerResolver 必须知道服务容器在哪里。

Symfony 组件如何知道在哪里寻找服务容器,我该如何配置?我问是因为我想使用 Symfony 组件构建一个自定义框架,这意味着我'将制作我自己的服务容器,我希望能够将 Validator 和 ControllerResolver 指向该服务容器。

【问题讨论】:

    标签: symfony


    【解决方案1】:

    在 Symfony 标准版中,容器由内核初始化。查看AppKernel 及其父类。

    内核在the registerContainerConfiguration() method中加载一个配置文件:

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
    }
    

    此代码将加载特定于环境的配置文件(config_prod.ymlconfig_dev.yml 等)。在该文件imports the main config.yml file 的标准设置中。

    services.yml 文件是loaded with an import in config.yml

    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
        - { resource: services.yml }
    

    如果您正在考虑构建自己的框架(这是一种很好的学习体验),您需要先阅读更多现有框架的代码。另外,值得一读的优秀Create your own PHP framework

    这意味着 Validator 组件必须知道去哪里寻找服务容器

    这太可怕了。我发现验证和服务容器之间没有任何联系。我会想一个更好的设计。

    附:每个人都应该编写一次自己的框架。下一步应该是删除它。

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2016-09-19
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多