我有很多助手函数-Grouped In Classes-用于(格式化字符串和日期,URL助手(,我想在几个捆绑包中使用和共享,我需要知道如何在捆绑包之间共享这些助手函数的最佳实践。
我想到的是创建一个助手捆绑包,并在我的项目中的另一个捆绑包中使用这个捆绑包,或者使用供应商助手。
那么我该如何做到这一点,以及在多个捆绑包中使用创建共享帮助程序的最佳实践是什么。
如果有任何参考资料我可以看,请与我分享。
提前谢谢。
最佳实践是创建一个包含这些类的PHP库。如果您确实需要Symfony集成(例如DIC配置(,那么创建依赖于此库的捆绑包。
每个使用bundle的bundle都必须在composer.json中列出它的依赖项。因此,每次安装依赖它的bundle时,它都会被自动安装。
有很多很棒的库示例,它们可以使用composer导入并使用,即使它们本身不是捆绑包,也可以使用,例如,看看Doctrine''Common。
无论如何,您也可以像在Symfony中创建任何其他捆绑包一样创建捆绑包,并根据您的需要构建代码。您会注意到,Doctrine的许多捆绑包将使用共享库Doctrine'Common
。
如果你有通用类,它应该被分组在一个bundle中(正如你所说的"Helper bundle"(,如果可能的话,类应该被定义为服务。
如果你在多个项目中使用这个捆绑包,并且你想在未来升级它,你应该考虑将这个捆绑包移动到单独的repo中,并将其定义为"独立"捆绑包(这样你就可以按composer和vendor目录将其包含在你的项目中。
我认为最佳实践是创建helper Bundle并在helper Bundle中创建服务然后您可以使用多个捆绑包中的服务。
伪示例:在您的服务Helper.php
中
namespace HelperBundle'Services;
class Helper{
protected $url;
public function __construct(){
}
}
在依赖项注入文件夹中的ProfileTreeUserExtension.php
中确认加载的服务配置文件是sevices.yml
namespace HelperBundle'DependencyInjection;
use Symfony'Component'DependencyInjection'ContainerBuilder;
use Symfony'Component'Config'FileLocator;
use Symfony'Component'HttpKernel'DependencyInjection'Extension;
use Symfony'Component'DependencyInjection'Loader;
/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class ProfileTreeLayoutExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader'YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
在service.yml
中
services:
helper.service:
class: HelperBundle'Services'Helper
然后您可以在几个捆绑包中致电HelperService Just
$helper = $this->container->get('helper.service');
您还可以在另一个服务中扩展Helper类
use HelperBundle'Services'Helper;
class AnotherService extends Helper{}
有关于服务容器和依赖注入的好文章