This tools helps you with Collectors in DependencyInjection, Console shortcuts, ParameterProvider as service and many more.
composer require symplify/package-builder
- Register
ParameterProvider
service in your config:
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');
};
- Require
ParameterProvider
in__construct()
where needed:
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();
Do you want to allow users to register services without worrying about autowiring? After all, they might forget it and that would break their code. Set types to always autowire:
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]));
}
}
This will make sure, that PhpCsFixer\Fixer\FixerInterface
instances are always autowired.
That's all :)
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');
}
}
In case you are experiencing a bug or want to request a new feature head over to the Symplify monorepo issue tracker
The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on symplify/symplify.