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 ?

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 ComponentLibrary 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
  • 8.
  • 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.
  • 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 DataGateway,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
  • 18.