Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Zend Framework Introduction


Published on

Features and patterns in Zend Framework

Published in: Technology

Zend Framework Introduction

  1. 1. Zend Framework Introduction Features and Common Patterns
  2. 2. Examples from a demo blogging application named Postr are used throughout this presentation. You can view, download, or fork the demo web application on GitHub:
  3. 3. Zend_Tool Automated scaffolding of project and project components Used in creating the demo application, Postr Referenced throughout this presentation
  4. 4. Zend_Tool Create a Project mkdir postr cd postr zf create project .
  5. 5. Zend_Tool Project Structure .zfproject.xml application/ Bootstrap.php configs/ application.ini controllers/ ErrorController.php IndexController.php views/ scripts/ error/ error.phtml index/ index.phtml public/ .htaccess index.php tests/ application/ bootstrap.php library/ bootstrap.php phpunit.xml
  6. 6. Front Controller All HTTP requests for the application go through one script. Apache’s rewrite module (or equivalent) makes this happen. See: Front Controller pattern public/index.php public/.htaccess
  7. 7. Zend_Application Bootstraps the application Provides reusable resources Sets up PHP environment See: Zend_Application application/Bootstrap.php
  8. 8. Con guration Default con guration is in application/configs/application.ini Allows for con guration sections; for example: • production • staging • testing • development Sections can inherit from other sections See: application/con gs/application.ini
  9. 9. Name the Project Default application class name pre x is Application_. zf change application.class-name-prefix Postr_
  10. 10. Updated Con guration Added to application/configs/application.ini: [production] appnamespace = "Postr_" See: application/con gs/application.ini
  11. 11. Model-View-Controller (MVC) Composite of several design patterns Isolates domain logic from input and presentation Model: domain logic View: presentation layer Controller: interprets input and passes it to the Model; provides Model data to the View See: Model-view-controller application/models/ application/views/ application/controllers/
  12. 12. Zend_Layout Implementation of the Two Step View pattern Allows for consistent layout across multiple pages Easier to manage than “includes” See: Zend_Layout Two Step View
  13. 13. Zend_Layout Enable Layout zf enable layout
  14. 14. Zend_Layout Layout View Script application/ layouts/ scripts/ layout.phtml Added to application/configs/application.ini: [production] resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" See: application/layouts/scripts/layout.phtml application/con gs/application.ini
  15. 15. Controllers Connects the Model and the View Contains one or more actions URL based routing typically decides what controller and action to execute: :controller/:action Custom routing options available
  16. 16. View Scripts PHP templates No domain logic please! Default suffix of .phtml One view script per controller action (by default)
  17. 17. Create a Controller zf create controller Entry
  18. 18. Entry Controller and View Script application/ controllers/ EntryController.php views/ scripts/ entry/ index.phtml tests/ application/ controllers/ EntryControllerTest.php See: application/controllers/EntryController.php application/views/scripts/entry/index.phtml tests/application/controllers/EntryControllerTest.php
  19. 19. Create Additional Controller Actions zf create action new Entry zf create action get Entry zf create action edit Entry zf create action post Entry zf create action put Entry zf create action delete Entry
  20. 20. Entry Actions Methods added to application/controllers/EntryController.php: newAction() getAction() editAction() postAction() putAction() deleteAction() See: application/controllers/EntryController.php
  21. 21. Entry Actions View scripts created: application/ views/ scripts/ entry/ delete.phtml edit.phtml get.phtml new.phtml post.phtml put.phtml See: application/views/scripts/entry/
  22. 22. Zend_Test Functional (end-to-end) testing of controllers Simulates HTTP requests to the application No web server required Also provides a DB testing facility See: Zend_Test Functional Test tests/application/controllers/EntryControllerTest.php
  23. 23. Models Models are speci c to your domain No such thing as one-size- ts all models No Zend_Model However, some useful patterns have emerged
  24. 24. Create a Model zf create model Entry
  25. 25. Entry Model application/ models/ Entry.php See: application/models/Entry.php
  26. 26. Zend_Form Input ltering Input validation Form and element rendering Huge time saver See: Zend_Form Zend_Filter Zend_Validate
  27. 27. Zend_Form Create a Form zf create form Entry
  28. 28. Zend_Form Entry Form application/ forms/ Entry.php See: application/forms/Entry.php
  29. 29. Zend_Db_Table Object-oriented database interface Implements the Table Data Gateway and Row Data Gateway patterns See: Table Data Gateway Row Data Gateway
  30. 30. Con gure a DB Adapter zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/production.db" zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/staging.db" -s staging zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/testing.db" -s testing zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/db/development.db" -s development
  31. 31. Updated Con guration Added to application/configs/application.ini: [production] resources.db.adapter = "Pdo_Sqlite" resources.db.params.dbname = APPLICATION_PATH "/../data/db/production.db" [staging : production] resources.db.adapter = "Pdo_Sqlite" resources.db.params.dbname = APPLICATION_PATH "/../data/db/staging.db" [testing : production] resources.db.adapter = "Pdo_Sqlite" resources.db.params.dbname = APPLICATION_PATH "/../data/db/testing.db" [development : production] resources.db.adapter = "Pdo_Sqlite" resources.db.params.dbname = APPLICATION_PATH "/../data/db/development.db" See: application/con gs/application.ini
  32. 32. Load DB Schema Project-speci c and not built-in to Zend Framework: mkdir -p data/db php scripts/load.sqlite.php See: scripts/load.sqlite.php scripts/schema.sqlite.sql
  33. 33. Create DB Tables from the Database zf create dbtable.from-database
  34. 34. Entry and Entry Tag DB Tables application/ models/ DbTable/ Entry.php EntryTag.php See: application/models/DbTable/Entry.php application/models/DbTable/EntryTag.php
  35. 35. Data Mapper Keeps your domain logic isolated from your database implementation Domain objects should not directly use data mappers See: Data Mapper
  36. 36. Create a Data Mapper zf create model EntryMapper
  37. 37. Entry Mapper application/ models/ EntryMapper.php See: application/models/EntryMapper.php
  38. 38. Zend_Paginator Pagination for database or any arbitrary data Several adapters available: • Array • DbSelect • DbTableSelect • Iterator • Null • Write your own in order to paginate domain objects See: Zend_Paginator
  39. 39. Zend_Paginator Create a Paginator Adapter zf create model EntryPaginatorAdapter
  40. 40. Zend_Paginator Entry Paginator Adapter application/ models/ EntryPaginatorAdapter.php See: application/models/EntryPaginatorAdapter.php
  41. 41. Zend_Date Manipulate dates and times Useful for date and time calculations Allows for input from and output to various formats Used as a domain object in the Postr demo application: • Entry Updated • Entry Published See: Zend_Date application/models/Entry.php
  42. 42. Zend_Markup Renders BBcode or Textile markup into HTML or other formats Extensible so may see other markup languages in the future Used in the Postr demo application: • Entry Content and Entry Summary are stored as Textile markup • Entry Content and Entry Summary can optionally be retrieved as HTML See: Zend_Markup BBCode Textile application/models/Entry.php
  43. 43. Zend_Navigation Create menus, breadcrumbs, links, and sitemaps Used to create the menu navigation in the Postr demo application See: Zend_Navigation application/Bootstrap.php application/layouts/scripts/header.phtml
  44. 44. Controller Plugins Allows developers to hook into various events during the controller process: • routeStartup() • dispatchLoopStartup() • preDispatch() • postDispatch() • dispatchLoopShutdown() • routeShutdown() See: Controller Plugins application/plugins/RouteContext.php
  45. 45. References Bradley Holt’s demo application: Postr Zend Framework Quick Start Matthew Weier O’Phinney’s demo application: Pastebin Zend Framework Programmer’s Reference Guide
  46. 46. Credits Author Bradley Holt Layout & Design Jason Pelletier This presentation licensed under Creative Commons—Attribution 3.0 United States License.