Getting Started with Zend Framework

Embed Size (px)

DESCRIPTION

Introduction to Zend Framework and developing your first application with Zend Framework's MVC.

Citation preview

  • 1. Getting Started with Zend Framework Matthew Weier O'Phinney Software Architect Zend Framework

2.

  • Just AnotherPHP Hacker

Who's this guy? 3. Matthew Weier O'Phinney

  • Contributor to Zend Framework since pre-0.1.0; used ZF internally at Zend.
  • Component lead on MVC since August 2006.
  • Full-time Zend Framework developer since December 2007.
  • Software Architect since April 2008.

4. What we'll cover

  • Bird's-eye view of Zend Framework
  • How to start integrating Zend Framework in your applications
  • MVC overview
  • Quick Start to developing applications using Zend Framework's MVC

5. What is Zend Framework? It's just another PHP framework 6. No, what is Zend Framework? It's a glue library. 7. No, really, what is Zend Framework?

  • PHP 5 library for web development productivity
  • Open source
    • New BSD license is business-friendly
    • Free for development and distribution
    • CLA process assures that the code is free of legal issues
  • Class library fully OOP
  • Documentation in many languages
  • Quality & testing fully unit tested
    • >80% code coverage required; >90% encouraged

8. Zend Framework Philosophy

  • Simplicity and Extensibility
    • Easy solutions for the 80% most commonly-used functionality for web applications
    • Extensibility enables easy customization, to solve the remaining 20%
    • No complex XML configuration files
  • Good object-oriented and agile practices
    • Use-at-will architecture, but also:
    • Full stack framework
    • Designed for extensibility
    • Frequent testing
    • Frequent interaction with user community

9. Zend Framework quality process

  • Say what youre going to do
    • Proposal process
  • Do it
    • Write object oriented components
    • Unit test your component
      • We encourage test-driven development (TDD)
    • Document how it works
  • Verify it matches what you said
    • Open-source development and community review
    • Frequent and thorough testing with PHPUnit
    • Code coverage reports with PHPUnit
    • Review by internal Zend team for compliance

10. What's in Zend Framework? 11. How to get started 12. Two approaches

  • Start using individual components in your existing applications
    • Gradual migration path
    • Add new functionality to your application as you need it
    • Replace existing functionality with well-tested components
  • Start using the Zend Framework MVC layer
    • Develop new applications
    • Have ZF intercept new functionality in your site
    • Create well-tested and testable applications in Zend Framework

13. MVC Overview 14. Model-View-Controller

  • Model : Business logic and abstraction
  • View : Presentation layer
  • Controller : Decide which Models and Views to utilize, based on request

15. Front Controller

  • Intercept all requests
  • Map requests to Action Controllers
  • Dispatch requested Action Controller and return response

16. Benefits of MVC

  • Separate your code into discrete realms of responsibility
    • Business logic
    • Presentation logic
    • Route decisioning
  • Predictable location of code on the server
  • Typically utilizes OOP => easier to test and re-use
    • Easier to maintain long term

17. Quick Start 18. Setup the Project Structure

  • First things first: create your directory structure

19. Get Zend Framework

  • From http://framework.zend.com/download/latest

20. Get Zend Framework

  • Extract the archive
    • tar xzf ZendFramework-1.6.1.tar.gz
    • Unzip ZendFramework-1.6.1.zip
    • Or use a GUI frontend
  • Copy or symlink the library/Zend directory you extracted into your library directory:

21. Create a Virtual Host

  • Simplest version:

22. Create your .htaccess file

  • php.ini directives:
    • date.timezone: many apps rely on this
    • short_open_tags: view scripts are easier to write with this on
    • error_reporting: default error reporting level E_ALL|E_STRICT for development
    • display_errors: turn on for development

23. Create your .htaccess file

  • RewriteRules: any request to a file that does not exist should go to our Zend Framework bootstrap:

24. Create your bootstrap files

  • index.php:
    • Indicate we need bootstrapping for our application
    • Load our bootstrap file, and handle any errors
    • Dispatch our front controller

25. index.php 26. Create your bootstrap files

  • application/bootstrap.php:
    • Setup application constants
    • Web bootstrap related setup
      • include_path
      • Setup autoloading
    • Front controller setup
      • Add a controller directory
      • Set some application parameters

27. application/bootstrap.php 28. Create a controller

  • All controllers extend Zend_Controller_Action
  • Naming conventions
    • Controllers end with 'Controller':IndexController, GuestbookController
    • Action methods end with 'Action': signAction(), displayAction(), listAction()
    • Controllers should be in the application/controllers/ directory, and named after the class, with a .php suffix: application/controllers/IndexController.php application/controllers/GuestbookController.php
    • All conventions are configurable!

29. IndexController.php 30. But... there's no code there...

  • By default, a view is rendered; you don't need to do anything to enable this.
  • The view rendered is /.phtml
  • The view script path resolution is configurable!

31. Create a view script

  • View scripts go in application/views/scripts/
  • View script resolution looks for a view script in a subdirectory named after the controller
    • Controller name used is same as it appears on the url:
      • GuestbookController appears on the URL as guestbook
      • GuestBookController appears on the URL as guest-book
      • Basically, MixedCased becomes dash-separated
  • View script name is the action name as it appears on the url:
    • signAction() appears on the URL as sign
    • myAccountAction() appears on the URL as my-account
    • Basically, camelCased becomes dash-separated

32. index/index.phtml view script 33. But... that's just HTML!

  • View scripts use PHP as their templating language PHPisa template language!
  • Mix HTML and PHP
  • Use alternate control structure annotations for readability
  • Use short tags (heavily debated) for brevity

34. Create an ErrorController

  • Application errors are trapped by the front controller by default
  • When exceptions are detected, ErrorController::errorAction() is invoked
  • Separate 404 (Not Found) errors from 500 (Application) errors to return proper response codes to the user
  • Display errors in development, log them in production
  • Alternately, do something else:
    • Perform a search based on the originally requested URL
    • Display a site map

35. ErrorController.php 36. Create a view script for the ErrorController

  • We have a controller and action, so we need a view script
  • Appears in error/error.phtml of the view scripts directory

37. error/error.phtml 38. But wait, these aren't complete HTML pages!

  • You're right they are your application views
  • This leads into our next topic: layouts

39. Layouts Design Patterns

  • Two Step View
    • Inject application views into a common view to return
    • Usually associated with a Transform View think XSLT
  • Composite View
    • Inject rendered views into a common view, OR
    • Render additional views from a master view
  • In a nutshell: build the site view, or layout, from lots of little building blocks, or application views

40. Layouts Example Use Cases

  • We want our application views to appear in this:

41. Zend_Layout

  • Steps:
  • Initialize layouts
  • Perform view initialization (set doctype, etc)
  • Create a layout script

42. Zend_Layout: bootstrap changes 43. Zend_Layout: layout script 44. Configuring your Application

  • Zend Framework is configuration-less
  • But your application may need configuration
  • Zend_Config...
    • allows you to write configurations in several formats
    • provides OOP access to your configuration
    • provides configuration inheritance between sections
  • Zend_Registryallows you to persist objects including your configuration for the duration of the request
    • Put stuff in
    • Take stuff out

45. Sample INI configuration skeleton 46. Configuration: bootstrap.php changes 47. What about the M? The Model?

  • Patterns :
  • Table Data Gateway
    • Abstracts SQL access to a single database table and its rows
    • Often used with Row Data Gateway, which abstracts access to a single table row
  • Table Module
    • Abstracts and restricts access to a table
    • Defines entry points to the table
    • Entry methods contain business logic
  • Domain Model
    • Abstracts entities and their relationships
    • Not necessarily a 1:1 correspondence with tables

48. Setting up the Database Adapter

  • Zend_Db::factory() will instantiate the requested adapter
  • Pass our configuration to it
    • Negates the need to modify code going from development to testing to production
  • Set the adapter as the default adapter for our Table Data Gateway (Zend_Db_Table)

49. DB Adapter Configuration and Bootstrap 50. Table Data Gateway: Zend_Db_Table

  • Abstracts SQL for interacting with a database table
  • Fetch Rowsets or individual Rows
  • Override methods to enforce data integrity
  • In our application
    • Ensure we get a created timestamp on each row
    • Prevent updates to existing rows

51. Model_DbTable_Guestbook 52. Model: Table Module

  • Identify access methods:
    • Save entries
    • Fetch all entries
    • Fetch individual entry
  • Attach a data source
    • Often a Table Data Gateway
    • In our case, Model_DbTable_Guestbook

53. Table Module Retrieve Table Data Gateway 54. Table Module Access Methods 55. Using the Model in the Controller

  • Controller needs to retrieve Model
  • To start, let's fetch listings

56. Adding the Model to the Controller 57. Create a Form

  • Zend_Form:
  • Provides input filtering:
    • Filter chains to sanitize data prior to validation
    • Validation chains to ensure the data provided is valid
  • Allows rendering form
    • Follows decorator pattern
    • Completely configurable
    • Output in any format your application needs: HTML, PDF, XML, etc.

58. Create a form Identify elements

  • Guestbook form:
  • Email address
  • Comment
  • Captcha to reduce spam entries
  • Submit button

59. Create a form Guestbook form 60. Create a form Guestbook form (cont.) 61. Using the Form in the Controller

  • Controller needs to fetch form object
  • On landing page, display the form
  • On POST requests, attempt to validate the form
  • On successful submission, redirect

62. Adding the form to the controller 63. Demonstration 64. Summary 65. What we learned

  • Recommended project structure
  • How to get and install Zend Framework
  • How to configure your Apache vhost
  • How to setup your php.ini settings and RewriteRules
  • What your bootstrap files are and what they should contain
  • How to create Action Controllers and View Scripts
  • How to create and initialize layouts
  • How to use configuration and the registry
  • How to create a model, including database access
  • How to create a form

66. Where to go from here

  • Zend Framework QuickStart Guide: http://framework.zend.com/docs/quickstart
  • Zend Framework Manual http://framework.zend.com/manual/manual
  • Zend Framework Wiki (proposals, tutorials, etc.) http://framework.zend.com/wiki
  • Zend Developer Zone (tutorials, articles, announcements) http://devzone.zend.com/

67. Thank you!