symplify/package-builder

此包已被弃用且不再维护。作者建议使用自定义代码包。

为 Symplify 包提供的依赖注入、控制台和内核工具包。

11.3.2 2023-02-22 19:16 UTC

This package is auto-updated.

Last update: 2023-12-03 20:02:53 UTC


README

Downloads total

这个工具可以帮助你处理依赖注入中的收集器、控制台快捷方式、作为服务的参数提供者等。

安装

composer require symplify/package-builder

使用

通过服务获取所有参数

  1. 在您的配置中注册 ParameterProvider 服务
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\PackageBuilder\Parameter\ParameterProvider;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $containerConfigurator): void {
    $services = $containerConfigurator->services();

    $services->defaults()
        ->autowire()
        ->autoconfigure();

    $services->set(ParameterProvider::class)
        ->args([service('service_container')]);

    $parameter = $containerConfigurator->parameters();
    // will be used later
    $parameter->set('source', 'src');
};
  1. 在需要的地方在 __construct() 中要求 ParameterProvider
namespace App\Configuration;

use Symplify\PackageBuilder\Parameter\ParameterProvider;

final class ProjectConfiguration
{
    /**
     * @var ParameterProvider
     */
    private $parameterProvider;

    public function __construct(ParameterProvider $parameterProvider)
    {
        $this->parameterProvider = $parameterProvider;
    }

    public function getSource(): string
    {
        // returns "src"
        return $this->parameterProvider->provideParameter('source');

        // use specific typed method to avoid `mixed`
        return $this->parameterProvider->provideStringParameter('source');
    }
}

从任何地方获取供应商目录

use Symplify\PackageBuilder\Composer\VendorDirProvider;

$vendorDirProvider = new VendorDirProvider();
// returns path to vendor directory
$vendorDirProvider->provide();

智能编译器传递,适合懒程序员 ↓

如何添加编译器传递?


始终自动注入此类型

您是否希望允许用户在不担心自动注入的情况下注册服务?毕竟,他们可能会忘记,这会破坏他们的代码。设置类型以始终自动注入

namespace App;

use PhpCsFixer\Fixer\FixerInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel;
use Symplify\PackageBuilder\DependencyInjection\CompilerPass\AutowireInterfacesCompilerPass;

final class AppKernel extends Kernel
{
    protected function build(ContainerBuilder $containerBuilder): void
    {
        $containerBuilder->addCompilerPass(new AutowireInterfacesCompilerPass([FixerInterface::class]));
    }
}

这将确保 PhpCsFixer\Fixer\FixerInterface 实例始终被自动注入。


就这些了 :)

在控制台颜色中显示差异

use Symplify\PackageBuilder\Console\Output\ConsoleDiffer;

final class SomeCommand
{
    public function __construct(
        private ConsoleDiffer $consoleDiffer
    ) {
    }

    public function run(): void
    {
        // prints colored diff to the console output
        $this->consoleDiffer->diff('oldContent', 'newContent');
    }
}

报告问题

如果您遇到错误或想请求新功能,请前往 Symplify monorepo 问题跟踪器

贡献

此包的源代码包含在 Symplify monorepo 中。我们欢迎在 symplify/symplify 上为此包做出贡献。