如果应用程序中有多个捆绑包,请避免重复复制文件和服务


Avoid dupplicating files and services if there are more than one bundles in the application

我只想知道做这件事的最佳实践/方法是什么。我将用一个例子来解释,使它更容易理解。

注意:到目前为止,如果我的应用程序中只有一个捆绑包,下面的示例可以正常工作。问题在帖子的底部。

提前感谢

SingleBundle/Resources/config/services.yml

services:
    form_errors:
        class:  Hello'SingleBundle'Services'FormErrors

FormErrors.php

namespace Hello'SingleBundle'Services;
use Symfony'Component'Form'FormInterface;
class FormErrors
{
    public function getErrors(FormInterface $form)
    {
        .......
        .......
        return $errors;
    }
}

问题:如果我的应用程序中有多个捆绑包,如何避免复制这两个文件?我在哪里定义服务以及可以从所有捆绑包访问的服务类?

您必须在实现此服务逻辑的捆绑包中定义您的服务。如果您有bundle SingleBundle,调用服务的最佳方式是使用特殊前缀(在您的情况下为single_bundle.form_errors)。如果您有两个或多个bundle,则不必重复服务定义和服务类声明,因为在一个bundle的命名空间中定义的所有服务(已正确加载到项目中)都可以在另一个bundel的命名空间中访问(也已正确加载至项目中)。

所以,我认为在创建服务之前,您只需要思考应该在哪里定义它。如果您对可能的重复有任何疑问,请注意服务名称。