Symfony bundle 允许自定义提供者

Symfony bundle allow custom provider

我正在为社区开发一个包。

我的捆绑包提供获取某些内容的服务。我有一个名为 Providers 的文件夹,其中包含一些提供商和一个 AbstractProvider class。我所有的提供商都扩展了 AbstractProvider.

当开发人员使用 "my_class" 等字符串调用我的服务函数时,我使用以下名称从我的提供商实例化 class:

<?php
new MyClass();

Providers 文件夹中,我有一些常用的提供程序,但我想允许开发人员添加自己的提供程序(扩展我的 AbstractProvider class ).我的服务必须使用 class 名称实例化此自定义提供程序。

我怎样才能实现这个目标?

这是我的树:

MyBundle
└── Toto
    └── Providers
        ├── AbstractProvider.php
        ├── ArticleProvider.php
        ├── BlockRubricProvider.php
        ├── CommuniqueProvider.php
        ├── HomepageProvider.php
        ├── OffreurSolutionsProvider.php
        ├── PartenaireProvider.php
        ├── PresseProvider.php
        └── PublicationProvider.php

还有我的服务:

class MyServiceProvider
{

    public function __construct() { }

    /* $providerName exemple: "my_provider" */
    public function getProvider( $provierName )
    {
        $providerClass = str_replace('_', '', ucwords($contentType->identifier, '_'))."Provider";

        /** @var AbstractProvider $provider */
        $provider = new $providerClass( $provierName );

        return $provider;
    }
}

如何让开发人员拥有自己的文件夹 Providers 和他们的提供者,并允许我的服务用这个系统实例化它?

也许是这样的?

use **\Toto\Providers\*;

谢谢!

为什么不使用全名?在这种情况下,您不需要包括任何用途。您可以使用像 here 这样的配置包来配置提供程序,并且在您的 AbstractProvider 中,您可以放置​​一个抽象方法来为用户用来调用它的提供程序命名。

希望能帮到你