Symfony如何知道在哪里可以找到services.yml配置文件?

时间:2015-12-30 21:53:37

标签: symfony

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

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

Symfony组件如何知道在哪里查找服务容器,以及如何配置?我问,因为我想使用Symfony组件构建自定义框架,这意味着我&# 39;我将创建自己的服务容器,并且我希望能够将Validator和ControllerResolver指向该服务容器。

1 个答案:

答案 0 :(得分:1)

在Symfony Standard Edition中,容器由内核初始化。看看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组件必须知道在哪里查找服务容器

这太吓人了。我发现验证和服务容器之间没有任何关联。我想到了更好的设计。

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