2015-12-30 41 views
1

在Symfony 3.0(以及我確信2.X)中,如果我想使用依賴關係創建自定義約束驗證器,那麼必須將該驗證器註冊爲依賴注入容器中的服務(它由默認在project_directory/app/config/services.yml中)使用特殊標籤(如描述here)。Symfony如何知道在哪裏可以找到services.yml配置文件?

這意味着Validator組件必須知道在哪裏查找服務容器。這個問題也出現在ControllerResolver中。由於控制器可以註冊爲服務,ControllerResolver必須知道服務容器在哪裏。

Symfony組件如何知道在哪裏查找服務容器,以及如何配置它?我問,因爲我想用Symfony組件構建一個自定義框架,這意味着我將創建自己的服務容器,並且希望能夠將Validator和ControllerResolver指向該服務容器。

回答

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

這意味着,驗證組件必須知道到哪裏尋找服務容器

這是可怕的。我發現驗證和服務容器之間沒有任何關聯。我會想到更好的設計。

P.S.每個人都應該寫一個自己的框架。下一步應該刪除它。

相關問題