PSR-4 autoloader aplikace

composer nette Nikdy jsem moc nelpěl na PSR-FIG pravidlech. Částečně možná proto, že jsem je nikdy moc nechápal, částečně možná proto, že nemám rád, když mi někdo něco nutí. Nekterá pravidla jsou ale docela fajn (i když se vždy něco najde). Jedním z jich je PSR-4: Improved Autoloading. Jenže proč řešit nějaký autoloading, když v Nette funguje skvěle, ani o tom člověk neví? Fakticky jsou v každém sandboxu použity minimálně 2 autoloadery a mohl bych se tedy ohánět rychlostí, protože: If there must be multiple autoload functions, spl_autoload_re­gister() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. By contrast, __autoload() may only be defined once. (zdroj) Ale to je otázka a praticky jsem nikdy žádný významný posun ve výkonu nezaregistroval (i když teoreticky nemusím iterovat přes celý vendor, abych našel něco v app). Mnohem významnější je pro mě sada pravidel, kterými se programátor musí při použití PSR-4…  přečtěte si více

Magie zvaná mapping presenterů

nette Ona to vlastně ani není taková magie jako to není nikde pořádně popsané. Než se pustím to obludných složitostí, bylo by vhodné zmínit se co to vlastně mapping presenterů je. Viděli jste někde toto v konfiguraci? application: mapping: *: App\*Module\Presenters\*Presenter Určitě ano, je to totiž vykopírované ze sandboxu. Tato konfigurace říká, kde má Nette hledat presentery. Resp. pod jakým namespace. To je důležité. Na adresářové struktuře totiž v tomto případě vůbec nezáleží. Kdyby v konfiguračním souboru nebyl mapping vůbec uvedený, presenter by musel být bez namespace, tedy například \HomepagePresenter. Pokud by pak zase někdo měl raději MVC, mohl by…  přečtěte si více

Rozšíření pro DIC

DIC nette Jednu z věcí, které jsem zde na blogu moc nepopsal jsou rozšíření pro DIC (Dependency Injection Container, potomek Nette\DI\Container). A protože se chci vrátit jednodušším článkům, zaměřím se na úplně základy. Jaká je motivace k psaní rozšíření DIC a co to vlastně je? Své aplikace rozděluji poměrně důsledně na jakési balíčky (bundles – název ze Symfony). Cílem je rozškatulkovat celou aplikaci podle logických celků, tzn. každý bundle by se měl starat pouze o tu svojí věc a zároveň si s sebou nést vše potřebné. Jedná se o balíčky typu Articles, který se stará (jak sám název napovídá) pouze a jenom o články, nebo Eshop, GoPay, Media, Users, atd. Výhodou tohoto…  přečtěte si více

Jednoduché testování pro úplně každého

nette tester Konec slibů, článek je tu. Tentokrát se rozepíšu o nástroji Testbench. Testbench by měl pomoci s rychlým testováním Nette aplikace. Je zaměřen spíše integračně a vhodně doplňuje Nette\Tester, který je zaměřen spíše jednotkově. Myšlenka, která stála za vytvořením tohoto nástroje je velmi prostá – testování je složité. Je složité hlavně pro lidi, kteří dokonale nerozumí problému. Proto je tento nástroj zaměřen na rychlý start pro úplně každého (kdo si prošel alespoň quickstart a chce testovat). To se projevuje v tom, jak je Testbench postaven (viz další povídání). Testbench se sestává z různých nápadů, které jsem všude možně okoukal za posledních X měsíců a něco mě na nich zaujalo. Pojďme se tedy společně podívat jak se Testbench používá a proč ho sám rád používám pro rychlé testy. Základní nastavení testovacího prostředí U každého testování je vhodné testovat v co nejvíce čistém prostředí. Proto je dobrý nápad vytvořit si vlastní bootstrap (tests/bootstrap.php), jehož obsah může být…  přečtěte si více

ZČU - Nette je fajn, ale máme raději Javu

nette php přednáška Dnes jsem měl opět tu čest přednášet studentům předmětu KIV/WEB na fakultě aplikovaných věd (ZČU) o tom, jak se dají dělat webové aplikace pomocí webového frameworku. Je to vždy skvělý zážitek. Jako vždy sedělo v publiku (doslova) pár lidí, kteří už mají s frameworkem nějaké základní zkušenosti. Ostatní jsou většinou studenti, pro které je toto první seznámení s webovým světem a právě tato přednáška je jedna z posledních – takový vrchol pomyslného ledovce. Odnesl jsem si asi dva poznatky. Prvně – následující přednáška je moc složitá. Kdybych prezentaci dokázal zkrátit na polovinu, tak by to bylo OK. Není třeba zmiňovat se o DI, routování atd. (to jen spíš taková moje osobní poznámka). Druhý poznatek je však méně uspokojivý (i když o tom vím). Z nějakého důvodu se neustále FAV snaží tlačit Javu i na místa, kde si myslím, že nemá zase až takový smysl (tedy do webových aplikací). Každý rok se o tom na FAV rozhoří ta stejná, nikdy nekončící debata. Snažil jsem se argumentovat třeba…  přečtěte si více

Znovupoužitelné části formuláře

nette php Před nějakým časem jsem psal o tom, jak vytvořit znovupoužitený formulář. Nejedná se o nic jiného, než o správné navržení a následné použití komponent, tedy potomků UI\Control. Pokud bych měl být upřímný, nemyslím si, že se formuláře nějak často na webu opakují a osobně tento princip používám spíše pro oddělení části aplikace do samostatného balíčku. Tím spíš najde následující ukázka méně použití. Právě mám totiž za úkol navrhnout předělání jedné administrace. Úkolem není hledět na to, jak moc je tento přístup špatný, ale navrhnout řešení, které nahradí stávající 1:1. Tato administrace obsahuje často se opakující (a velmi rozsáhlý) formulář, který se skládá z…  přečtěte si více

Od indexu až po presenter

nette php Když jsem se učil pracovat s Nette Frameworkem, musel jsem v začátcích hodně přivírat oči a říkat si „prostě to tak je“. Hodně věcí bylo zahaleno do tmy. Teď už to tak naštěstí není, ale stále se stává, že mi někdo napíše a děkuje za poodhalení a vysvětlení toho, jak to funguje na pozadí (za což zase děkuji já). Pokusím se tedy pokračovat a vrátím se na úplný začátek – do index.php a poodhalím, jak probíhá start takové běžné aplikace. A jako vždy – co nejjednodušeji. Zodpovím (nebo alespoň nastíním odpovědi na) následující otázky: proč redirect vyvolává AbortException jak napsat vlastní NanoPresenter proč má Nette dva request objekty kde se bere životní…  přečtěte si více

Ještě lepší struktura Nette aplikace

doctrine kdyby nette Každý, kdo postavil pár aplikací, musel vždy řešit ten samý problém. Jakou strukturu by měla aplikace mít? A co když se začne projekt rozrůstat? Měl bych se držet toho jak to dělá sandbox (resp. web-project)? Postupem času jsem dokonvergoval k relativně přijatelnému výsledku a vzhledem k tomu, že projekt na kterém jsem to poprvé pořádně rozjel byl ukočen, rozhodl jsem se jej zveřejnit. Už je to sice nějaký čas, ale v době největšího vrcholu tohoto projektu jsem jej považoval za takovou osobní špičku. A to hned z několika důvodů. K tomu se ale dostanu postupně. A vezmu to pěkně od těch nejmenších částí. Presentery a komponenty U presenterů se mi vlastně docela líbí jak to dělá sandbox. Ve složce presenterů jsou logicky presentery a také složka templates, která obsahuje šablony právě k těmto presenterům: presenters/ templates/ Homepage/ default.latte @layout.latte BasePresenter.php HomepagePresenter.php Dříve to bylo jinak. Šablony a…  přečtěte si více

Crazy JavaScript PDF generator

NodeJS PhantomJS React Kdysi mi někdo řekl, že správný programátor by měl být tak trošku děvka pro všechno. Nestačí jen umět PHP. Nestačí jen umět JavaScript. S tímto názorem jsem od samého začátku souhlasil. Ostatně je to jeden z důvodů, proč se občas zajímám i o věci, které v nejbližší době nevyužiju a zase tolik jim nerozumím (také to podle toho pak vypadá). Jednou z takových věcí je React. Nedávno jsem si hrál také s PhantomJS a když už jsme u toho, tak ani NodeJS mi není cizí. A co se stane, když se jednoho večera rozhodnete spojit všechno dohromady? Něco šíleného… (-: Krátké seznámení Vzhledem k tomu, že tento blog byl vždy zacílen spíše na začátečníky, bylo by vhodné jednotlivé projekty krátce přiblížit. React vytvořený Facebookem se sám prezentuje jako knihovna pro stavění uživatelských rozhraní. V sekci Why React? se lze však dočíst zajímavější skorodefinici: „Many people choose to think of React as the V in MVC.“ Celá myšlenka Reactu je postavená na komponentách. A já mám komponenty rád. Myslím…  přečtěte si více

Návrhový vzor Legacy code

legacy nette Asi každý se k tomuto návrovému vzoru jednou dostane. Zatím jsem vždy takovou práci striktně odmítal, ale tentokrát šlo o jinou situaci a svolil jsem k poklesu od OOP frameworku ke špagetě. Ačkoliv má pojem „legacy code“ celou řadu definic, já osobně jej chápu jako kód, který je prostě starý. Vhodnější by však bylo asi říci, že se jedná o kód se kterým teď musím pracovat, ale nenapsal jsem ho. Zůstaňme však u první definice. Zde platí, že (stejně tak jako jakýkoliv jiný navrhový vzor) obsahuje celou řadu opakujících se poznávacích prvků. Například mezi vývojáři panuje pozoruhodná pasivita. Nikdo se nepostaví na zadní a nepřijde s něčím novým. Nemyslím novou fičuru,…  přečtěte si více