PHP Best Practices Please try to fit your code to 80 columns. That's decimal 80. A. Morton
Koncepce větších aplikací
Front Controller Design Pattern
Celý web má jeden přístupový bod, přes který se posílají všechny požadavky z klienta (např. index.php).
Přístupový skript se nazývá bootstrap.
Bootstrap zjistí typ požadavku, provede jeho routing a dispatching.
Routing – vyhledání vhodné stránky, třídy, nebo jiné entity, která umí požadavek obsloužit.
Dispatching – zavolání požadované metody na získané entitě.
Požadavek na zobrazení (GET) Akce k provedení (POST)
Výhody použití:
verze 1.1
Routing se provádí z parametrů zaslaných z klienta.
Bezpečnější Méně náchylné k chybám programátora © 2008-2009, Martin Kruliš
2
Zobrazování stránek.
Model-View-Control
Návrhový vzor, který se používá pro správu jednotlivých stránek. View (pohled)
Model
Zdroj dat (např. z databáze) Poskytuje jednoduchý interface šitý na míru dané stránce.
Controller
verze 1.1
Entita, která se stará o sestavení stránky. Čte data z modelu a prezentuje je do HTML.
Řídí činnost modelu a pohledu Obsluhuje požadavky
© 2008-2009, Martin Kruliš
3
Šablony
Snaha maximální separace HTML (CSS, JS, …) od PHP
Vhodné zejména u velkých webů
Snazší správa, lepší dělba práce, …
PHP kód pouze vykonává příkazy HTML je generováno pomocí šablon
Šablony
V PHP (prokládané HTML)
Šablona obsahuje PHP pouze pro vkládání dat (podmínky, iterace, …) Vkládají se pomocí include()/require()
Šablony v textových souborech
Šablona je HTML soubor se speciálními značkami.
verze 1.1
{{značka}}, <%značka%> apod.
PHP soubor přečte a pomocí funkcí pro práci s řetězci nahradí značky za platné hodnoty. © 2008-2009, Martin Kruliš
4
Databáze
Ručně psané SQL dotazy nejsou příliš pohodlné.
Table Data Gateway Design Pattern
Jeden objekt (třída) zapouzdřuje přístup k jedné tabulce. Objekt zná položky tabulky a jejich datové typy.
Row Data Gateway Design Pattern
Špatně se řeší cachování, skládání dotazů, opakování kódu, problémy při změně struktury DB, …
Jeden objekt (třída) zapouzdřuje přístup k jednomu řádku z tabulky. Spolupracuje s table data gateway.
Vazby mezi tabulkami jsou uložené v gateways.
verze 1.1
Automatické generovaní JOIN dotazů. © 2008-2009, Martin Kruliš
5
PHP a roboti (crawlers)
Roboti prohledávají celý web (i vaše stránky).
Pozor: stránky získané metodou GET by neměly dělat side-efekty. Cokoli jste na stránky umístili vidí celý svět.
Chování "hodných" robotů se dá nastavit souborem robots.txt v kořenovém adresáři.
Pozor, aby se crawler nedostal na citlivý obsah.
Viz http://www.robotstxt.org/
SEO – Search Engine Optimalization
verze 1.1
URL má velkou prioritu – důležitý text by měl být v odkazech. Používejte meta tagy description, keywords… Piště kvalitní obsah, používejte korektně tagy (
, <em> …). © 2008-2009, Martin Kruliš
6
Zend Framework
Frameworks
Framework je sada knihovních skriptů, které mají usnadnit vývoj aplikací (v našem případě webových). V PHP mají různé vestavěné knihovny často různá rozhraní.
Způsobeno postupným vývojem a zpětnou kompatibilitou. Frameworky se snaží nabídnout jednotné API. Většina frameworků je objektových.
Framework přidává další funkcionalitu.
verze 1.1
Lepší přenositelnost (mezi servery, databázemi…) Implementace webových návrhových vzorů Předpřipravené komponenty, které se často používají
© 2008-2009, Martin Kruliš
8
Zend framework – slovo úvodem
Společnost Zend
Společnost založil Zeev Suraski a Andi Gutmans. Od verze PHP4 je zodpovědná za vývoj jádra PHP.
Zend Framework
Open source framework, jehož vývoj byl iniciován firmou Zend.
Publikován pod New BSD License. V současné době byla uvolněna verze 1.7.8.
verze 1.1
Dnes spolupracují také Adobe, Google, Mirosoft a další.
Během předloňské přednášky byla k dispozici teprve 0.9 beta.
Spolupráce s ním je integrována do Zend Studia. Viz http://zendframework.com/
© 2008-2009, Martin Kruliš
9
Zend framework - základy
Front Controller a Model-View-Control
Šablony
Zend framework je založen na těchto návrhových vzorech. Routovací informace bere z URL (ve vlastním formátu). Automaticky vyhledává soubory (kontroléry a šablony). Viz třída Zend_Controller Používá šablony s prokládaným PHP. Součástí Model-View-Control vzoru – viz třída Zend_View.
Databáze
Objektový adaptér zapouzdřující připojení k databázi. Zapouzdření dotazů – Zend_Db_Select.
Nabízí i Table Data Gateway a Row Data Gateway.
verze 1.1
© 2008-2009, Martin Kruliš
10
Zend framework – další funkce
Zběžný přehled výběru tříd
verze 1.1
Zend_Acl – access control list pro autorizaci uživatelů Zend_Auth – autentizace uživatelů Zend_Cache – vyrovnávací paměť Zend_Config – načítání konfiguračních souborů Zend_Feed – práce s RSS Zend_Json – generování Json objektů od JavaScriptu (pro AJAX) Zend_Log – logování všeho druhu Zend_Mail – odesílání pošty a sestavování mailů Zend_Search_Lucene – obecný vyhledávací engine Zend_Service – webové služby Zend_Session Zend_Translate – překládání, správa jazykových verzí © 2008-2009, Martin Kruliš
11
Zend framework - shrnutí
Výhody:
Jednotné rozhraní Usnadňuje práci Podpora (vývojové nástroje, komunita…) Open source
Nevýhody:
Místy až příliš robustní
Občas poměrně striktní
verze 1.1
Je třeba vytvářet mnoho objektů, aby se zobrazila jednoduchá stránka. Chcete-li speciální funkcionalitu, musíte si ji stejně napsat sami. Integrovat vaše funkce do již hotových řešení dá občas práci.
© 2008-2009, Martin Kruliš
12