Přestože o Symfony moc často nepíšu, funguji s tímto frameworkem již pár let a postavil jsem na něm několik webů a různých, řekněme, vnitrofiremních webových aplikací. Přešel jsem k němu z CodeIgniteru, když jsem hledal něco pokročilejšího a progresivnějšího.
Rozhodně toho nelituji. S příchodem Drupalu 8 se to ukázalo jako výborná volba, protože Drupal, kterým se zabývám nejvíce, využívá řadu komponent právě ze Symfony. A je úžasné sledovat, jak se vše v tomto světě průběžně vylepšuje. Čtvrtá řada frameworku přinesla výrazné zjednodušení kódové základny, Symfony 4.1 zase přijde se zřejmě nejrychlejším routováním mezi PHP frameworky (info tu).
Co se týká administračního rozhraní, tam jsem trochu pátral. Z dnešního pohledu si říkám, že jsem řadu věcí dělal složitě. Něco jsem psal na čistém Bootstrapu, jinde jsem zase využil koupenou administrační šablonu Metronic a rouboval do ní funkce. Docela známý nástroj symfonického světa pro tvorbu administračních rozhraní, Sonata, jsem zase nevyužil, protože mi přišel pro moje projekty příliš velké.
Když jsem na přelomu roku stál před nutností postavit si rychle novou vlastní aplikaci pro správu úkolů, reportování klientům a vytváření faktur, do které bych časem zahrnul i různé SEO vychytávky, které mám v jiné aplikaci, přemýšlel jsem, co použiju.
Jako nejjednodušší řešení se nabízelo doplnit fakturovací funkce do současné aplikace, kterou mám napsanou ještě v CodeIgniteru. Napsal jsem ji v roce 2013, dost se na ní naučil a nepovažuji ji za vyloženě špatnou. Bez problémů by mi mohla sloužit dále. Potíž je v tom, že CodeIgniter mě nějak přestává bavit, chci si více procvičovat různé postupy v Symfony a vlastní aplikace je k tomu ideální.
„Firemní aplikaci“ v CodeIgniteru jsem postavil na Bootstrapu, využil jsem pár doplňujících knihoven pro šablonování a přihlašování, základ aplikace pak stojí na skvělém Grocery CRUD.
Drobné problémy stávající řešení mělo. Reporty provedených prací jsem exportoval jenom do CSV, což někteří klienti nedovedli otevřít. Za těch pět let jsem vlastně nikdy nedotáhl úvodní stránku, kde měly být základní statistiky. Funguje jenom zobrazení aktuálního data a přehled za poslední dva měsíce. Bohužel je tak blbě vizuálně udělaný, že jsem mu vlastně nikdy nevěnoval pozornost.
Evidují se tu tři hlavní věci. Klienti, jejich projekty a úkoly. Ty se zadávají s datem a délkou trvání, peníze se vypočtou samy na základě hodinové sazby pro klienta. Po exportu úkolů do měsíčního reportu jsem stále častěji potřeboval tyto úkoly označit jako vyfakturované.
Na začátku jsem udělal chybu v návrhu a připravil aplikaci na to, že vybrané úkoly se označí jako vyfakturované na základě projektu. Ne přímo u klienta. Tím, jak roste podíl úspěšných klientů a počet jejich projektů, které pro ně připravuji, se označení vyfakturovaných věcí stalo značně zdlouhavé.
A i když jsem uvažoval nad doplněním funkcionality, která mi vystaví faktury přímo v této aplikaci, moc se mi nechtělo do integrace SEO pomůcek, které mám v jedné zbastlené aplikaci na Symfony 2 z dob svých začátků.
Hledá se admin panel pro Symfony
Takže řešení bylo jasné. Postavit to znovu na Symfony. Začal jsem si před nějakou dobou hrát s javascriptovým frameworkem Vue.js, takže mě velice lákalo jej v projektu využít a celé to mít jako onepage aplikaci. Takovou, která se na začátku načte a pak se v ní všechny přehledy jen přehazují JavaScriptem. Jenže Vue.js neumím na takové úrovni, aby mi to nezabralo více času, než je zdrávo.
Čas byl velice rozhodující prvek. Aplikaci jsem dělal po večerech a víkendech, resp. po jejich kouscích. Čím jsem starší, tím jsem línější ve volném čase pracovat. A přes den bylo nutné se věnovat práci pro klienty.
Rozhodl jsem se tedy pro klasické řešení bez propracovaného JavaScriptu. Teď najít vhodný vizuál. Rozhodně jsem se nechtěl zdržovat vymýšlením vymyšleného a kódováním vlastního vzhledu admin panelu. Metronic mi dnes přijde strašlivě přeplácaný, různé alternativy se nakonec ukazovaly jako polofunkční. Nejvíce mě zaujalo AdminLTE. Jednoduché, s dostatkem připravených komponent.
Založil jsem si tedy nový projekt na Symfony 4 a začal do něj roubovat zvlášť stažené AdminLTE. Samozřejmě s využitím Webpacku, Yarnu a všech těchto moderních udělátek. Jenže potom to přišlo. Nevím přesně kde, ale v nějaké diskuzi k úplně jinému problému jsem narazil na odkaz k dokumentaci pro EasyAdmin Bundle. A na první pohled jsem se zamiloval. Vše jsem smazal a začal znovu a lépe.
Do hry přichází EasyAdmin Bundle
EasyAdmin je šikovný balíček pro projekty na Symfony, který vizuálně stojí na zmíněném AdminLTE, funkčně pak na konfiguraci přes YAML. Ano, vše, co pro vytvoření jednoduchého CRUD rozhraní (create, read, update, delete) a layoutu okolo musíte udělat, je připravit si vlastní entity a EasyAdmin nakonfigurovat přes zápis v souboru yml.
A že toho nakonfigurujete opravdu hodně:
- Název aplikace a primární barvu
- Použitý jazyk admin rozhraní (je přeloženo i do češtiny)
- Položky v menu a jejich ikonky
- Sloupce ve výpisech dat a texty okolo
- Detaily v editačním formuláři a v zobrazení detailu dané entity
- Funguje i propojení ManyToOne a OneToMany v zadávacích formulářích
- Každá entita ze Symfony zde může figurovat opakovaně v různých podobách výpisu dat
- Připojíte i vlastní CSS a JS, případně assety z externích CDN
Je toho mnohem více. A co mi vyhovuje opravdu maximálně, je možnost snadného doplnění vlastních věcí. Využil jsem možnosti odkazovat na vlastní routu, abych do aplikace přidal generování nástěnky z vlastního controlleru. Přidal jsem vlastní akce, což bylo nezbytné pro zprovoznění reportů do Excelu (s využitím PhpSpreadsheet). Stejně tak jsem přidal do detailu entity se zákazníkem tlačítko pro vyfakturování všech aktivních úkolů (konečně!).
Využil jsem i možnost rozšíření výchozího controlleru, abych do něj přidal vlastní věci a navěsil se třeba na ukládání a vkládání nových záznamů u zvolené entity. Chystám se upravit šablony konkrétních režimů u konkrétních entit, abych vylepšil zobrazované informace. Ale není to primární úkol v tuto chvíli.
Stejně tak se mi líbí elegantní řešení, kdy s malým množstvím práce bylo možné upravit výchozí formulář, který se objevuje při přidávání entit odkazovaných přes pole typu OneToMany. EasyAdmin standardně umí něco jako přidávání štítků u článku. Já potřeboval u zadávání faktury přidávat entity jednotlivých položek, kdy nestačí jen text, ale je třeba přidat i částku, DPH a podobně. Trvalo to pár dní metodou pokus omyl, pak stačilo si přečíst dokumentaci trochu pozorněji a za chvíli bylo hotovo.
Edita Polzerová přichází
Novou firemní aplikaci, dá-li se to tak nazvat, mám připravenou. Stejně jako ta stará mi dovoluje evidovat zákazníky, jejich projekty a s nimi spojené úkoly s délkou trvání a datem zpracování. Oproti dosavadnímu stavu mám vylepšené reportování. Zatím jen do hloupé tabulky v Excelu, ale až bude čas, pohraju si i s formátováním. Nevyužívám už MySQL, vystačím si s SQLite, takže se aplikace i snadněji zálohuje a mirguje.
A především mám doplněné generování faktur. Jestliže ve staré aplikaci jsem označil projekty jako vyfakturované a pak šel do účetnictví, zde v Editě mohu fakturu rovnou vyrobit. Přestal jsem totiž používat FlexiBee a potřebuji v něčem faktury vytvářet. Fakturoid je fajn. iDoklad se tak také tváří. V aplikaci BezŠanonu mě zase oslovuje vzhled prostředí. Dočasně jsem využil promakanou fakturu v Excelu od Ondry Pohorského, ale přepisování dat v Excelu mi prostě už nestačí.
Chtěl jsem zkrátka něco na míru. A zároveň aplikaci, kterou budu nucen rozvíjet, takže i kdybych chvíli neměl žádné zakázky na Symfony, budu stále nucen v něm něco vytvářet. S Editou i sám se sebou jsem v tuto chvíli maximálně spokojený.
A co mě čeká dále? Evidence výdajů. Import výpisů z banky. Kniha jízd. A připojení SEO udělátek z jiné aplikace. Možná je nesmysl to mít v jednom a ještě názor změním. Ale momentálně mi připadá šikovné, přihlásit se do jednoho rozhraní, kde ráno uvidím na nástěnce stav projektů pro klienty, financí, zisku z AdSense, problémy a úspěchy na svých webech. A tedy vlastně to, zda se můžu ten den jít válet někam k vodě, nebo zda budu muset zase máknout (což je pravděpodobnější).
Co je to za hloupý název programu? Edita je taková moje imaginární sekretářka. Vše zařídí, je obětavá, neodmlouvá, je na ni spoleh. Takže proč aplikaci nepojmenovat po ní. A že má mé příjmení? Tož i v reálném životě se občas ze šéfa a sekretářky stanou partneři ;)
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář