SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
WEB 开发实践
  基于 Zend Framework
自我简介


• 闫斌(Ben Yan)
• Sr. Engineer @ BI-Tracking, ValueClick Brands
• 抚琴居(http://www.yAnbiN.org)
• Ben.Yan@msn.com
怎么认识 Zend Framework


     类库? 框架?

  是的,两个都是!!
怎么使用 Zend Framework


Component Library                        Business
Zend_Db/Zend_Pdf/Zend_Mail/Zend_Feed/…
                                          Logic
                   Application Framework
Zend Framework 程序骨架
 >zf.bat create project quickstart   quickstart
                                         ├─document
 Quickstart                              ├─source
     ├─docs                              │ ├─application
     ├─application                       │ │ ├─configs
     │ ├─configs                         │ │ ├─controllers
     │ ├─controllers                     │ │ ├─models
     │ ├─models                          │ │ └─views
     │ └─views                           │ │       ├─helpers
     │      ├─helpers                    │ │       └─scripts
     │      └─scripts                    │ ├─library
     ├─library                           │ ├─resource
     ├─public                            │ └─public
     └─tests                             └─testing
         ├─application                       ├─application
         └─library                           └─library
Zend_Front_Controller – 插件

•   routeStartup DB 、Cache、Log 等各组件的初始化、自定义路由
•   routeShutdown 权限控制(module/controller/action)、载入特定资源
•   dispatchLoopStartup 模板选择
•   preDispatch 多次调用。更改 Action 执行顺序。
•   postDispatch 多次调用。Action Response 已知,渲染视图。
•   dispatchLoopShutdown 收尾工作、发送日志(Zend_Wildfire)
Zend_Front_Controller – 路由

• 类型众多:
  • Static、Regex、Hostname、Rest 、Chain

• Route_Chain:
  • 将多个路由进行组合,1+1>2

• 不同的路由可指向同一个Action
  • 方便网站升级,有利于 SEO
Zend_Action_Controller



            瘦!
Zend_Application

• 一切皆为资源(Resource),尽量延迟加载
• 高度可定制化
• 资源依赖     class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
           {
               protected function _initXYZ()
               {
                   $this->bootstrap('Cachemanager');
                   $cacheManager = $this->getResource('Cachemanager');

                   // doSomthing ...
                   return $xyz;
               }
           }
Zend_View & Zend_Layout

• 尽量通过 Zend_View_Interface 来使用模板系统
• 灵活使用视图助手(View Helper)
  • 占位符类:HeadScript、HeadLink、HeadMeta、HeadTitle
  • 区域助手:Partial、PartialLoop

• 使用 Zend_Layout 解决网站页面整体结构问题
• 避免直接使用 Zend_Form 渲染页面
  • Zend_Form_Decorator_ViewScript
Model
分层架构

   界面层    • 解释命令、显示信息(比如 MVC 中 Controller、View)


   服务层    • 定义软件功能,协调领域对象。小型项目可同领域层合并


   领域层    • 系统核心:负责业务概念、业务状况以及业务觃则


  基础结构层   • 提供基础的技术支持:消息发送、领域持久化、事务管理等



原则:每层都高内聚,同上层松耦合,且只依赖于下层。
服务层
• 定义软件功能
 • 外观上,易用的应用程序的 API;内部上,协调领域逻辑。
 • 最小化的服务层是对某一领域逻辑的简单封装

• 常见应用
 • CURD 与缓存(Zend_Cache)
 • 应用程序逻辑(Zend_Mail、Zend_Log)
 • 认证与授权(Zend_Auth、Zend_Acl)
 • 数据的过滤与校验(Zend_Form、Zend_Filter、Zend_Validate)
领域层

• 领域模型应该是一个只关注自身业务的类
• 现实的折衷
 • class XXX extends Zend_Db_Table
 • class YYY extends Doctrine_Record
基础架构层/数据源层
• 表数据入口(Table Data Gateway,Zend_Db_Table)
  • 数据表访问入口,每个实例处理所有行
• 行数据入口(Table Data Gateway,Zend_Db_Table_Row)
  • 单条记录入口,每个实例代表一行
• 活动记录(Active Record,Doctrine_Record)
  • 跟行数据入口相似,但增加了领域逻辑
• 数据映射器(Data Mapper,Doctrine 2)
  • 独立的对象与数据持久层的映射
/**
                                          * @Entity
                                          * @Table(name="users")

Doctrine 2 简介                             * @HasLifecycleCallbacks
                                          */
                                        class User
                                        {
                                             /**
• Object-Relational Mapper                    * @Id
                                              * @Column(type="integer")
                                              */
   • 支持基本映射                                  protected $id;

   • 支持关联映射                                 /** @Column(type="integer") */
                                            protected $created;

• Entity Manager                        /**
                                        *@OneToOne(targetEntity="Address")
   • 工作单元(Unit of Work)                 */
                                            protected $address;
   • 后写事务(Transactional write-behind)       /** @PrePersist */
                                            public function onPrePersist()
• Event System                              {
                                                $this->created = time();
                                            }
                                        }
怎么获取帮助
• 官方手册
  • Quick Start、Getting Started with XXX、Reference Guard
• 博客、社区、邮件列表
  • PHP Developer / Planet PHP、 Community Wiki、Mailing Lists
  • Matthew Weier(Project Leader)、Proposals(Requirements、Theory)
• 幻灯片、视频、图书
  • Slide Share、Zend Casts、 Webinars、 Podcasts
  • Zend Framework 1.8 Web Application Development
• Google
Questions ?

Mais conteúdo relacionado

Mais procurados

專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定Shengyou Fan
 
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊Shengyou Fan
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 SeedingShengyou Fan
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Vincent Chi
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训Cody Zhang
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者Shengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用Shengyou Fan
 
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.XBo-Yi Wu
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來Shengyou Fan
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterBo-Yi Wu
 
開發工具與環境建置
開發工具與環境建置開發工具與環境建置
開發工具與環境建置Shengyou Fan
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境Shengyou Fan
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel frameworkBo-Yi Wu
 

Mais procurados (20)

專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊
[Modern Web Conf 2015] 給 PHP 開發者的 Composer 錦囊
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用
 
CodeIgniter 2.0.X
CodeIgniter 2.0.XCodeIgniter 2.0.X
CodeIgniter 2.0.X
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
開發工具與環境建置
開發工具與環境建置開發工具與環境建置
開發工具與環境建置
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
使用 wagon + VS Code 輕鬆打造 Windows 平台 PHP/Laravel 開發環境
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 

Semelhante a Web development with zend framework

模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
Kindeditor设计思路v2
Kindeditor设计思路v2Kindeditor设计思路v2
Kindeditor设计思路v2luolonghao
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發Weizhong Yang
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 
面向未来的前端类库开发 — KISSY 类库构想与实践
面向未来的前端类库开发  — KISSY 类库构想与实践面向未来的前端类库开发  — KISSY 类库构想与实践
面向未来的前端类库开发 — KISSY 类库构想与实践taobao.com
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanismlifesinger
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作Shengyou Fan
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]yiditushe
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路taobao.com
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 

Semelhante a Web development with zend framework (20)

模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
Django step0
Django step0Django step0
Django step0
 
Kindeditor设计思路v2
Kindeditor设计思路v2Kindeditor设计思路v2
Kindeditor设计思路v2
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
 
面向未来的前端类库开发 — KISSY 类库构想与实践
面向未来的前端类库开发  — KISSY 类库构想与实践面向未来的前端类库开发  — KISSY 类库构想与实践
面向未来的前端类库开发 — KISSY 类库构想与实践
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanism
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
Kind editor设计思路
Kind editor设计思路Kind editor设计思路
Kind editor设计思路
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 

Mais de thinkinlamp

对My sql dba的一些思考
对My sql dba的一些思考对My sql dba的一些思考
对My sql dba的一些思考thinkinlamp
 
云端的数据库
云端的数据库云端的数据库
云端的数据库thinkinlamp
 
My sql innovation work -innosql
My sql innovation work -innosqlMy sql innovation work -innosql
My sql innovation work -innosqlthinkinlamp
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbitthinkinlamp
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
大型微博应用Feed系统浅析
大型微博应用Feed系统浅析大型微博应用Feed系统浅析
大型微博应用Feed系统浅析thinkinlamp
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connectthinkinlamp
 
I os tech talk 观后感
I os tech talk 观后感I os tech talk 观后感
I os tech talk 观后感thinkinlamp
 
网页游戏开发与敏捷开发
网页游戏开发与敏捷开发网页游戏开发与敏捷开发
网页游戏开发与敏捷开发thinkinlamp
 
My sql自动化监控
My sql自动化监控My sql自动化监控
My sql自动化监控thinkinlamp
 
服务化的网站架构
服务化的网站架构服务化的网站架构
服务化的网站架构thinkinlamp
 
大型互联网应用架构设计
大型互联网应用架构设计大型互联网应用架构设计
大型互联网应用架构设计thinkinlamp
 
Php extension开发
Php extension开发Php extension开发
Php extension开发thinkinlamp
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍thinkinlamp
 
大型Sns数据库设计
大型Sns数据库设计大型Sns数据库设计
大型Sns数据库设计thinkinlamp
 
Mysql overview_20100811
Mysql overview_20100811Mysql overview_20100811
Mysql overview_20100811thinkinlamp
 

Mais de thinkinlamp (20)

数据仓库
数据仓库数据仓库
数据仓库
 
对My sql dba的一些思考
对My sql dba的一些思考对My sql dba的一些思考
对My sql dba的一些思考
 
云端的数据库
云端的数据库云端的数据库
云端的数据库
 
My sql innovation work -innosql
My sql innovation work -innosqlMy sql innovation work -innosql
My sql innovation work -innosql
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
蜘蛛
蜘蛛蜘蛛
蜘蛛
 
大型微博应用Feed系统浅析
大型微博应用Feed系统浅析大型微博应用Feed系统浅析
大型微博应用Feed系统浅析
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connect
 
I os tech talk 观后感
I os tech talk 观后感I os tech talk 观后感
I os tech talk 观后感
 
网页游戏开发与敏捷开发
网页游戏开发与敏捷开发网页游戏开发与敏捷开发
网页游戏开发与敏捷开发
 
My sql自动化监控
My sql自动化监控My sql自动化监控
My sql自动化监控
 
服务化的网站架构
服务化的网站架构服务化的网站架构
服务化的网站架构
 
大型互联网应用架构设计
大型互联网应用架构设计大型互联网应用架构设计
大型互联网应用架构设计
 
Php extension开发
Php extension开发Php extension开发
Php extension开发
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
大型Sns数据库设计
大型Sns数据库设计大型Sns数据库设计
大型Sns数据库设计
 
MySQL高可用
MySQL高可用MySQL高可用
MySQL高可用
 
Mysql overview_20100811
Mysql overview_20100811Mysql overview_20100811
Mysql overview_20100811
 

Web development with zend framework

  • 1. WEB 开发实践 基于 Zend Framework
  • 2. 自我简介 • 闫斌(Ben Yan) • Sr. Engineer @ BI-Tracking, ValueClick Brands • 抚琴居(http://www.yAnbiN.org) • Ben.Yan@msn.com
  • 3. 怎么认识 Zend Framework 类库? 框架? 是的,两个都是!!
  • 4. 怎么使用 Zend Framework Component Library Business Zend_Db/Zend_Pdf/Zend_Mail/Zend_Feed/… Logic Application Framework
  • 5. Zend Framework 程序骨架 >zf.bat create project quickstart quickstart ├─document Quickstart ├─source ├─docs │ ├─application ├─application │ │ ├─configs │ ├─configs │ │ ├─controllers │ ├─controllers │ │ ├─models │ ├─models │ │ └─views │ └─views │ │ ├─helpers │ ├─helpers │ │ └─scripts │ └─scripts │ ├─library ├─library │ ├─resource ├─public │ └─public └─tests └─testing ├─application ├─application └─library └─library
  • 6. Zend_Front_Controller – 插件 • routeStartup DB 、Cache、Log 等各组件的初始化、自定义路由 • routeShutdown 权限控制(module/controller/action)、载入特定资源 • dispatchLoopStartup 模板选择 • preDispatch 多次调用。更改 Action 执行顺序。 • postDispatch 多次调用。Action Response 已知,渲染视图。 • dispatchLoopShutdown 收尾工作、发送日志(Zend_Wildfire)
  • 7. Zend_Front_Controller – 路由 • 类型众多: • Static、Regex、Hostname、Rest 、Chain • Route_Chain: • 将多个路由进行组合,1+1>2 • 不同的路由可指向同一个Action • 方便网站升级,有利于 SEO
  • 9. Zend_Application • 一切皆为资源(Resource),尽量延迟加载 • 高度可定制化 • 资源依赖 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initXYZ() { $this->bootstrap('Cachemanager'); $cacheManager = $this->getResource('Cachemanager'); // doSomthing ... return $xyz; } }
  • 10. Zend_View & Zend_Layout • 尽量通过 Zend_View_Interface 来使用模板系统 • 灵活使用视图助手(View Helper) • 占位符类:HeadScript、HeadLink、HeadMeta、HeadTitle • 区域助手:Partial、PartialLoop • 使用 Zend_Layout 解决网站页面整体结构问题 • 避免直接使用 Zend_Form 渲染页面 • Zend_Form_Decorator_ViewScript
  • 11. Model
  • 12. 分层架构 界面层 • 解释命令、显示信息(比如 MVC 中 Controller、View) 服务层 • 定义软件功能,协调领域对象。小型项目可同领域层合并 领域层 • 系统核心:负责业务概念、业务状况以及业务觃则 基础结构层 • 提供基础的技术支持:消息发送、领域持久化、事务管理等 原则:每层都高内聚,同上层松耦合,且只依赖于下层。
  • 13. 服务层 • 定义软件功能 • 外观上,易用的应用程序的 API;内部上,协调领域逻辑。 • 最小化的服务层是对某一领域逻辑的简单封装 • 常见应用 • CURD 与缓存(Zend_Cache) • 应用程序逻辑(Zend_Mail、Zend_Log) • 认证与授权(Zend_Auth、Zend_Acl) • 数据的过滤与校验(Zend_Form、Zend_Filter、Zend_Validate)
  • 14. 领域层 • 领域模型应该是一个只关注自身业务的类 • 现实的折衷 • class XXX extends Zend_Db_Table • class YYY extends Doctrine_Record
  • 15. 基础架构层/数据源层 • 表数据入口(Table Data Gateway,Zend_Db_Table) • 数据表访问入口,每个实例处理所有行 • 行数据入口(Table Data Gateway,Zend_Db_Table_Row) • 单条记录入口,每个实例代表一行 • 活动记录(Active Record,Doctrine_Record) • 跟行数据入口相似,但增加了领域逻辑 • 数据映射器(Data Mapper,Doctrine 2) • 独立的对象与数据持久层的映射
  • 16. /** * @Entity * @Table(name="users") Doctrine 2 简介 * @HasLifecycleCallbacks */ class User { /** • Object-Relational Mapper * @Id * @Column(type="integer") */ • 支持基本映射 protected $id; • 支持关联映射 /** @Column(type="integer") */ protected $created; • Entity Manager /** *@OneToOne(targetEntity="Address") • 工作单元(Unit of Work) */ protected $address; • 后写事务(Transactional write-behind) /** @PrePersist */ public function onPrePersist() • Event System { $this->created = time(); } }
  • 17. 怎么获取帮助 • 官方手册 • Quick Start、Getting Started with XXX、Reference Guard • 博客、社区、邮件列表 • PHP Developer / Planet PHP、 Community Wiki、Mailing Lists • Matthew Weier(Project Leader)、Proposals(Requirements、Theory) • 幻灯片、视频、图书 • Slide Share、Zend Casts、 Webinars、 Podcasts • Zend Framework 1.8 Web Application Development • Google