Jedním z nejpoužívanějších PHP frameworků je nyní Laravel, který většina lidí zná nebo o něm alespoň slyšela. V celém ekosystému Laravelu je také microservice framework Lumen, který využívá stejných komponent. A byl navržen tak, aby bylo možné v případě potřeby jednoduše přejít na plnohodnotný framework Laravel.
A není lepší rovnou použít Laravel?
Na GitHubu začal Barry Heuvel (tvůrce Laravel Debugbarru) vlákno o budoucnosti Lumenu, jestli má vůbec smysl. Prvotní myšlenka totiž byla mít rychlejší framework pro microservicy, s rychlejším routerem. Laravel ale obsahuje Symfony router, jehož nová verze by měla být rychlejší než jakýkoli jiný router.
Lumenu od verze 5.8 také obsahuje šablonovací systém Blade, což je trochu zvláštní pro microservicy (můj názor). Největší boj ale je s dokumentací, která se často odkazuje na dokumentaci Laravelu a ve skutečnosti je funkčnost jiná.
Žádná konfigurace a defaultní namespace
Na Lumenu jsem se rozhodl postavit malou servisu, která pouze stahuje data z API a na jiné API je odesílá. V Lumenu ale neexistuje příkaz artisan app:name
, který změní výchozí namespace. Samozřejmě, jde to udělat i ručně, ale je nutné hledat kde všude se používá.
Větší problém ale nastal při hledání složky config
. Ta totiž v počátku neexistuje. Lumen načítá některé konfigurace až když je potřebuje. A pokud složka config neexistuje, načítá soubory z vendor/laravel/lumen-framework/config
. Další konfigurační soubory je nutné načíst manuálně v bootstrap/app.php
a přidat řádek $app->configure('queue');
Slovo některé je zvýrazněno záměrně. Při použití databáze se databázový konfig načítá automaticky. Pokud se ale zavolá u queable jobu dispatch, do fronty se nikdy nevloží. V tomto případě se totiž konfig nenačte. Proto je nutné načítat queue konfig ručně, viz příkaz výše.
Facade, Eloquent, Middleware a ServiceProviders
Vše uvedené v nadpisu je ve výchozí instalaci vypnuto. Žádný service provider ve složce app/providers
se nenačítá, fasády nefungují a eloquent také ne. Middleware se dá registrovat jen globálně pro celou aplikaci, nikoli pro jednotlivé routy. Vše je možné zapnout odkomentováním řádků v bootstrap/app.php
. Logicky ani package discovery v Lumenu nefunguje, takže service providery od knihoven je nutné registrovat ručně.
Implicit binding v metodách controlleru také nefunguje, ale nejde ani zapnout. V Lumenu totiž vůbec není dostupný. To v mnoha případech může značně prodloužit kód controllerů. Laravel totiž automaticky vrací error 404 pokud model nelze načíst. To vše ale je nutné řešit nyní ručně.
Verdikt
Lumen jsem zkusil na jednoduchou servisu, která pouze periodicky stahuje data z API a na jiné API je zpracované odesílá. Využívá frontu s databázovým driverem a vše lokálně loguje. Žádná raketová věda, přesto jsem trochu tápal.
Lumen asi stále bude lehce rychlejší než plnohodnotný Laravel, přesto se velkého boomu dle mě nedočká. A asi bych Lumen ani nedoporučil. Pokud ale někdo má jiný názor či zkušenosti, můžete se podělit v komentářích.
K tomuto článku již není možné přidávat další komentáře
Komentáře
Ačkoli Laravel nepoužívám a Lumen jsem jen lehce vyzkoušel tak jsem došel k podobnému názoru.
Obdobné to bylo před pár lety i mezi frameworky Symfony a Silex ( a Silex není moc micro :-D ).