Pli is a library and set of conventions to bootstrap Console applications with Symfony Console, DependencyInjection and Config components.

v0.1.2 2015-06-05 15:28 UTC

This package is auto-updated.

Last update: 2023-05-23 21:20:59 UTC


Pli is a library and set of conventions to bootstrap Console applications with Symfony Console, DependencyInjection and Config components.

Latest Version Build Status Scrutinizer Code Quality Code Coverage

The Symfony components are incredible powerful, but the price for this flexibility is quite a bit of bootstrapping code to set the components up. Especially when integrating Console, DependencyInjection and Config a developer has to copy and adapt a lot of code from the docs. Pli uses some assumptions (such as config files in Yaml format) to reduce the amount of code required to bootstrap a simple console application.

Developed by Florian Eckerstorfer in Vienna, Europe.


You can install Pli using Composer.

$ composer require cocur/pli


Bootstrapping a console application with Pli is a three-step process.

  1. Load configuration: Load and parse one or more Yaml config files.
  2. Build container: Create a container and invokes the extension to initialize it
  3. Create application: Creates and application and adds all command tagged with command to it. If a command implements ContainerAwareInterface the container is set on the command.

First we need our main file with the initialization of Pli. You also need a configuration and a extension class and Pli is very similar to Symfony in this regard. However, the Pli-version of an extension has far less features.

// console.php

use Cocur\Pli\Pli;

$pli = new Pli(__DIR__.'/config');
$config = $pli->loadConfiguration(new AcmeConfiguration(), ['config.yml']);
$container = $pli->buildContainer(new AcmeExtension(), $config);
$application = $pli->getApplication($container);
// src/AcmeConfiguration.php


use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;

class BranConfiguration implements ConfigurationInterface
    public function getConfigTreeBuilder()
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('acme');

        return $treeBuilder;

Pli also needs an extension that is used to build the container. You can set parameters, dynamically create service definitions and so on. If you want to store your service configuration in a Yaml file you can use the configDirectories property to retrieve the path to the config directory.

// src/AcmeExtension.php

use Cocur\Pli\Container\ExtensionInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

class BranExtension implements ExtensionInterface
    private $configDirectories;

    public function buildContainer(ContainerBuilder $container, array $config = [])
        $loader = new YamlFileLoader($container, new FileLocator($this->configDirectories));

    public function setConfigDirectories(array $configDirectories)
        $this->configDirectories = $configDirectories;

Change Log

Version 0.1.2 (5 June 2015)

  • Add parameters and compiler passes to container

Version 0.1.1 (5 June 2015)

  • Add support for multiple configuration directories

Version 0.1 (18 May 2015)

  • Initial release


The MIT license applies to cocur/pli. For the full copyright and license information, please view the LICENSE file distributed with this source code.