Symfony包允许自定义提供程序

时间:2018-03-26 09:33:41

标签: php symfony bundle vendor

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

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

当开发人员使用"my_class"之类的字符串调用我的服务函数时,我使用此名称从我的提供者实例化该类:

<?php
new MyClass();

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

我如何实现这一目标?

这是我的树:

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;
    }
}

如何让开发人员拥有自己的文件夹提供商及其提供商,并允许我的服务使用此系统对其进行实例化?

也许是这样的?

use **\Toto\Providers\*;

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不使用完整的被叫名称?在这种情况下,您不需要包含任何用途。您可以使用配置包(如here)配置提供程序,在AbstractProvider中,您可以放置​​一个抽象方法,为用户用来调用它的提供程序命名。

我希望可以帮到你