📅  最后修改于: 2023-12-03 14:58:38.514000             🧑  作者: Mango
在Drupal 8中,development.services.yml
文件通常用于在开发阶段中为模块注入服务、重写服务等,以便于调试和开发。
然而问题可能会在development.services.yml
文件中存在于你在生产环境中更新或升级时可能覆盖其他模块的现有服务,这可能会导致服务冲突和应用程序故障。
为了避免development.services.yml
文件覆盖其他模块的服务,我们建议使用以下方法:
development.services.yml
文件中引用它们。# custom_module.services.yml
services:
custom_module.example_service:
class: Drupal\custom_module\ExampleService
arguments: ['@entity.manager', '@logger']
然后在development.services.yml
中引用它:
imports:
- { resource: './custom_module.services.yml' }
有时可能需要在development.services.yml
文件中重写其他模块的服务,因为自定义模块需要提供自己的实现。在这种情况下,建议在自定义模块中创建单独的服务定义,而不是在development.services.yml
文件中覆盖其他模块的服务,如下所示:
# custom_module.services.yml
services:
custom_module.example_service:
class: Drupal\custom_module\ExampleService
arguments: ['@entity.manager', '@logger']
# custom_module.module
function custom_module_container_alter(&$container) {
$definition = $container->getDefinition('other_module.example_service');
$definition->setClass('Drupal\custom_module\ExampleService');
}
上面的代码将重写其他模块中的example_service
服务,而不会影响其他服务。这可以确保在更新或升级时不会覆盖其他模块的服务。
通过上述方法,我们可以避免在development.services.yml
文件中遇到的与其他模块的服务冲突问题。