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 中,您可以放置一个抽象方法来为用户用来调用它的提供程序命名。
希望能帮到你
我正在为社区开发一个包。
我的捆绑包提供获取某些内容的服务。我有一个名为 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 中,您可以放置一个抽象方法来为用户用来调用它的提供程序命名。
希望能帮到你