在Symfony 3.0中(我也确定2.X),如果我想创建一个带依赖关系的自定义约束验证器,我必须将该验证器注册为依赖注入容器中的服务(默认情况下在project_directory / app / config / services.yml中使用特殊标记进行描述(如here所述)。
这意味着Validator组件必须知道在哪里查找服务容器。 ControllerResolver也会出现此问题。由于控制器可以注册为服务,因此ControllerResolver必须知道服务容器的位置。
Symfony组件如何知道在哪里查找服务容器,以及如何配置?我问,因为我想使用Symfony组件构建自定义框架,这意味着我&# 39;我将创建自己的服务容器,并且我希望能够将Validator和ControllerResolver指向该服务容器。
答案 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.yml
,config_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。每个人都应该编写一次自己的框架。下一步应该是删除它。