Introduction to Zend Framework and developing your first application with Zend Framework's MVC.
- 1. Getting Started with Zend Framework Matthew Weier O'Phinney
Software Architect Zend Framework
2.
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
- 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
-
- New BSD license is business-friendly
-
- Free for development and distribution
-
- CLA process assures that the code is free of legal issues
- 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:
-
- Designed for extensibility
-
- Frequent interaction with user community
9. Zend Framework quality process
- Say what youre going to do
-
- Write object oriented components
-
-
- We encourage test-driven development (TDD)
- 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
-
- Add new functionality to your application as you need it
-
- Replace existing functionality with well-tested components
- Start using the Zend Framework MVC layer
-
- 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
- Map requests to Action Controllers
- Dispatch requested Action Controller and return response
16. Benefits of MVC
- Separate your code into discrete realms of responsibility
- 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
-
- tar xzf ZendFramework-1.6.1.tar.gz
-
- Unzip ZendFramework-1.6.1.zip
- Copy or symlink the library/Zend directory you extracted into
your library directory:
21. Create a Virtual Host
22. Create your .htaccess file
-
- 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
-
- 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
-
-
- Add a controller directory
-
-
- Set some application parameters
27. application/bootstrap.php 28. Create a controller
- All controllers extend Zend_Controller_Action
-
- 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!
- 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
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
-
- Inject application views into a common view to return
-
- Usually associated with a Transform View think XSLT
-
- 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
- Perform view initialization (set doctype, etc)
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
-
- 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
45. Sample INI configuration skeleton 46. Configuration:
bootstrap.php changes 47. What about the M? The Model?
-
- 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
-
- Abstracts and restricts access to a table
-
- Defines entry points to the table
-
- Entry methods contain business logic
-
- 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
-
- Ensure we get a created timestamp on each row
-
- Prevent updates to existing rows
51. Model_DbTable_Guestbook 52. Model: Table Module
-
- 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
- Provides input filtering:
-
- Filter chains to sanitize data prior to validation
-
- Validation chains to ensure the data provided is valid
-
- Follows decorator pattern
-
- Output in any format your application needs: HTML, PDF, XML,
etc.
58. Create a form Identify elements
- Captcha to reduce spam entries
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
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!