Integrace PsySH do Nette

PHP, Laravel, Tipy & triky

PsySH je interaktivní vývojářská konzole, REPL, pro PHP a do většiny frameworků existuje integrace. V Laravelu se jmenuje Tinker, existují také do Symfony, CakePHP i WordPressu. Pro Nette ale chybí a přitom je to tak jednoduché a účinné.

Integrace PsySH do Nette

REPL je zkratka pro Read-Eval-Print Loop, neboli smyčka čtení, vykonávání a výstupu. V Pythonu je možné REPL aktivovat jednoduše příkazem python či v NodeJS node. V PHP existuje jen interaktivní mód, který lze zapnout php -a, a tomu chybí P (print). Od toho je zde balíček PsySH.

Samozřejmě na jednoduché příkazy jako 5+8 asi nikdo nepoužije knihovnu. Ale co třeba si vyzkoušet složitější funkce. A co DI (dependency injection)? Ano, i to vše lze po integraci do Nette využívat. Stačí si knihovnu nainstalovat, integrovat pomocí kódu níže a používat.

Nic není lepší, než ukázka

A pro tentokrát jsem připravil ukázku přímo s videem. Ve videu jsou příklady, co lze s PsySH vyzkoušet. A poté i co lze dělat při integraci do Nette.

Instalace PsySH a integrace do Nette

Do kořenového adresáře stačí stáhnout soubor a pojmenovat jej psysh.phar, nebo nainstalovat přes composer. Následující kód počítá s PHAR souborem. Dále je nutné vytvořit soubor runPsysh.php s obsahem níže. A poté jen z příkazové řádky spustit pomocí php runPsysh.php

<?php
use Psy\Configuration;
use Psy\Shell;

// Includovat composer autoload jen v Nette 3.0 a výše require __DIR__ . '/vendor/autoload.php'; require 'psysh.phar'; /** * Resolve given FQCN from Nette DI * * @param string $type * @return mixed */ function resolve(string $type) { return App::resolve($type); } /** * Get data from config, use regular dot syntax as 'general.company.name' * * @param string $key * @return mixed */ function config(string $key) { return App::config($key); } class App { static $container; /** * Include autoloader and init Nette */ public static function init() {
// Nette 2.4
static::$container = require_once __DIR__ . '/app/bootstrap.php';
// Nette 3 a výše static::$container = \App\Bootstrap::boot()->createContainer(); } /** * Resolve given FQCN from Nette DI * * @param string $type * @return mixed */ static public function resolve(string $type) { return static::$container->getByType($type); } /** * Get data from config, use regular dot syntax as 'general.company.name' * * @param string $key * @return mixed */ static public function config(string $key) { $splittedKey = explode(".", $key); $current = static::$container->parameters; // Can work because of this: http://php.net/manual/en/language.references.arent.php foreach ($splittedKey as $keyPart) { if (isset($current[$keyPart])) { $current = &$current[$keyPart]; }else{ return null; } } return $current; } } App::init(); $config = new Configuration([ 'updateCheck' => 'never', 'prompt' => 'Kutac>>> ', ]); $shell = new Shell($config); $shell->run();

Znáte REPL knihovnu PsySH? Používáte ji třeba v Laravelu či jinde? Podělte se v komentářích

K tomuto článku již není možné přidávat další komentáře