Symfony Services auf der Konsole verwenden mit Boris

Oftmals steht man vor den Problem, dass man einfach nur den Rückgabewerte einer Servicemethode oder das Ergebnis einer PHP-Funktion wie bspw. preg_match_all wissen möchte. Um PHP-Funktionen zu evaluieren kann man auf Webdienste zurückgreifen oder die native PHP-Konsole nutzen. Um Symfony-Services aufzurufen bleiben einem nur Commands oder Controller. Alles in allem nicht optimal und womit wirklich arbeiten möchte. Seit Boris PHP um eine brauchbare REPL erweitert hat kann man beide Probleme auf einmal lösen. Boris liefert eine schöne Konsole und die Grundlage um auch Symfony-Services direkt in der Konsole auszuführen.

Boris installieren

Um nur Boris projektunabhängig/global zu installieren sind nur ein paar Zeilen nötig

curl -L -O https://github.com/borisrepl/boris/releases/download/v1.0.8/boris.phar
chmod +x boris.phar
sudo mv boris.phar /usr/local/bin/boris

Für Symfony-Projekte ist ähnlich einfach:

Dependency laden composer require floriansemm/boris-bundle:"1.*"

und im Kernel registrieren

$bundles = array(
    new Zayass\BorisBundle\ZayassBorisBundle(),
);

Nutzung

Boris an sich wird über ./boris aufgerufen und genutzt werden.

[1] boris> $var1 = 1;
// 1
[2] boris> $var2 = 2;
// 2
[3] boris> $var1 + $var2;
// 3
[4] boris>

In einem Symfony-Projekt wird Boris mit ./app/console repl aufgerufen. Anschließend ist jeder Symfony-Service in der Konsole verfügbar:

[1] Symfony-2.8.0 - app/dev/debug> $postRepository = $container->get('doctrine')->getRepository('AcmeDemoBundle:Post');
[2] Symfony-2.8.0 - app/dev/debug> $postRepository->find('1');
// object(Acme\DemoBundle\Entity\Post)(
//
// )