Zend Framework je open source, objektově orientovaný, webový aplikační framework implementovaný v PHP 5 a licencovaný pod New BSD license. Zend Framework (často označovaný jako ZF) je vyvíjen s ohledem na jednoduchý vývoj webových aplikací. Užívá modulární architektury která umožňuje vývojářům použít jen ty komponenty, které potřebují. Částečné závislosti mezi komponentami však existují. ZF v sobě zahrnuje komponenty pro MVC aplikace, autorizaci a autentizaci, implementuje různé druhy cache, filtrů a validátorů pro uživatelská data, jazykové komponenty a mnoho dalších. Začal být vyvíjen na počátku roku 2005, kdy mnoho nových frameworků, jako Ruby on Rails a Spring Framework získávalo na popularitě. Oficiálně byl oznámen na první Zend Conference. Šéf vývojářem je Matthew Weier O'Phinney.
Požadavky
Zend Framework od verze 1.7.0 vyžaduje minimálně PHP 5.2.4. Předchozí verze si vystačily s PHP 5.1.4 nebo novějšími. V produkčním prostředí však vývojáři důrazně doporučují používat PHP 5.2.3 nebo novější z důvodu většího zabezpečení a výkonu. Ke spuštění unit testů je vyžadována knihovna PHPUnit minimálně verze 3.0. Mnoho komponent také vyžaduje některá z modulových rozšíření PHP.
Vlastnosti
Všechny komponenty jsou plně objektově orientované a vyhovují direktivě E_STRICT
Modulární architektura typu užij-co-potřebuješ minimalizuje křížové závislosti mezi komponentami
Rozšiřitelná implementace MVC s podporou layoutů a šablonovacím systémem
Podpora pro multi-databázové systémy zahrnuje MySQL, Oracle, IBM DB2 MSSQL Server, PostgreSQL, SQLite a Informix Dynamix Server
Kompozice e-mailu a schopnost jej odeslat/přijmout skrze mbox, Maildir, POP3 nebo IMAP4
Flexibilní cache subsystémy s podporou mnoha typů backendů jako paměť nebo soubor
Komponenty
Stručný výčet nejznámějších komponent frameworku:
Zend_Acl – Jednoduchý a flexibilní systém pro správu uživatelských oprávnění
Zend_Application – Knihovna pro načtení a správu základních prvků aplikace (bootstraping)
Zend_Auth – Autentifikace uživatelů s mnoha druhy úložišť
Zend_Cache – Implementace cache systému s úložišti ve formě paměti, souboru, APC, SQLite atd.
Zend_Config – Slouží k nastavení aplikace skrze konfigurační soubory
Zend_Controller – Implementace Model-View-Controller (MVC) architektury
Zend_Date – Komponenta pro práci s daty
Zend_Db – Implementace multi-databázové vrstvy
Zend_Dojo – Knihovna pro práci s javascriptovým frameworkem Dojo
Zend_Filter – Komponenta pro filtrování uživatelských dat s velkým množstvím filtrů
Zend_Form – Objektový vývoj webových formulářů včetně filtrování hodnot a jejich validace
Zend_Layout – Správa layoutů aplikace
Zend_Log – Komponenta pro logování určitých dat s množstvím backendů
Zend_Mail – Tvorba e-mailů, správa e-mailových schránek
Zend_Memory – Podpora pro zpracování dat s omezeným množstvím dostupné paměti
Zend_OpenID – Implementace OpenID klienta i serveru
Zend_Paginator – Komponenta pro práci se stránkováním dat
Zend_Pdf – Objektový přístup a vytváření PDF souborů
Zend_Registry – Komponenta pro uchovávání objektů a hodnot v aplikační vrstvě
Zend_Translate – Podpora pro překlady a různé jazykové mutace aplikací
Helper je pomocná funkce, ulehčující programátorům práci. Často používaný kód či specifická funkčnost lze uložit do helperu a ten následně používat. Helpery v Zend Frameworku dělíme na action helpery a view helpery. První jsou používány v controllerech, druhé ve view. Zend Framework obsahuje některé předdefinované helpery.
Action helpery
ActionStack helper umožňuje vkládat požadavky na další zpracování action pomocí front controller pluginu Actionstack.
Autocomplete usnadňuje práci s automatickým doplňováním formulářů ContextSwitch a jeho specializovaná verze AjaxContext nastavuje odpověď vhodnou pro použití jiného formátu.
FlashMessenger uchovává text napříč aplikací. Umožňuje tak uchovávat výstup, který chceme použít při dalším načtení stránky. Nevýhodou FlashMessengeru je, že není schopen pojmenovávat prostor, proto je nutno k ukládanému textu přidávat další informace o něm (např. info|toto je info text). Nejlépe například nějakým znakem oddělit a následně pracovat s částmi řetězce.
View Renderer helper zajišťuje, že se po skončení action vykreslí příslušný view, bez dalšího nastavování. Toto chování lze samozřejmě změnit. Programátor tedy vytvoří v controlleru metodu action a k ní dle přijatých jmenných konvencí soubor view. O vlastní správné propojení se pak už postará framework.
View helpery
Action View Helper je schopen načíst konkrétní action z controlleru a vložit výsledek do view.
Partial Helper slouží k znovupoužití často opakovaných prvků ve view. Tento prvek je uložen ve vlastním souboru a do view vkládán pomocí tohoto helperu. Poskytován je také PartialLoop, který je načítán opakovaně.
Placeholder Helper je vhodný pro skládání obsahu stránek. Ukládá pojmenovaná data, ke kterým pak lze přistupovat v libovolném view. Skupina helperů Doctype, HeadLink, HeadMeta, HeadScript, HeadStyle, HeadTitle a InlineScript jsou pak konkrétními implementacemi Placeholder helperu.
HTML Object vkládá do view html prvky v tagu <object>. Vhodné například pro vkládání flash animací.
JSON Helper nastavuje správnou hlavičku odpovědi a vypíná použití layoutu.
Translate Helper pomáhá při práci s vícejazyčnou aplikací. Využívá knihovnu Zend_Translate.
Jmenné konvence
Všechny soubory frameworku jsou uloženy ve dvou adresářích. Hlavní a původní adresář je Zend a druhý, sloužící pro ukládání dalších dílčích knihoven (Extras), je ZendX. PHP od verze 5.3 sice podporuje jmenné prostory (namespaces), z důvodu zpětné kompatibility zůstává ale Zend Framework ve verzi 1 bez jejich podpory. Jeho následující verze (2.0) by již měla mít plnou podporu jmenných prostorů.
Třídy se pojmenovávají podle adresářové struktury, ve které se nachází, tj. třída v souboru Zend/Foo/Bar/Baz.php se bude jmenovat Zend_Foo_Bar_Baz. Všechny abstraktní třídy mají podle Zend Coding Standard mít název _Abstract (a tedy být v souboru abstract.php), veškerá rozhraní (interface) mají mít název _Interface (být v souboru interface.php).
Prefixem Zend_ mohou být podle licenčních podmínek označovány pouze třídy ze samotné distribuce Zend Frameworku.
Názvy všech chráněných (protected) a soukromých (private) metod a vlastností tříd musí začínat podtržítkem. Pro názvy všech metod a proměnných se používá cammelCase, konstanty jsou naproti tomu psané VELKÝMI_PÍSMENY.