Zend Framework 簡介
Download
Report
Transcript Zend Framework 簡介
1101345105 吳順發
1101345107 施凱中
1101345113 馮侃郁
1101345128 黃子瑋
簡介與架構
ACL
Template
DB
EventManager
ServiceManager
MVC
DEMO
2
Zend Framework (ZF) 是開放原始碼, 物件導
向的Web應用程式開發框架,在PHP5下運行並使用
MVC軟體架構。
4
Zend Framework是由開發PHP4、5的解析引擎
Zend Engine的Zend公司所開發。
Zend Framework技術合作夥伴則包括IBM,
Google, Microsoft, Adobe Systems等。
5
Zend Framework 1.0由2007年7月1日發布
Zend Framework 2.0由2012年9月5日發布
Zend Framework 2.1.5目前最新版本為由2013年
4月17日推出
6
所有物件均物件導向
物件幾乎不依賴其他元件
模組化能簡單使用其他應用
◦ Ex:Zend提供連結Google,Yahoo,Amazon Services的模組
7
全域設定
模組設定
模組
模組設置
mvc
模組進入點
程式進入點
8
Index.php
9
application.config.php
10
Module.php
11
module.config.php
12
13
module.config.php
14
Role
Resource
16
可以繼承或多重繼承
當多重繼承時依照繼承順序來分權限
17
18
是樹狀結構
不能多重繼承
19
20
22
23
25
PHP連接各種資料庫後,由於sql語法的差異,不同資料
庫各有相異的一些用法,如果轉換資料庫,就必須修改
所有相異的所在,且不同資料庫的不同寫法也造成學習
的負擔,而PDO可以解決這些問題。
PDO是PHP Data Object的首字母縮寫,是在PHP原有
的各種資料庫API上再建構一層輕量級的資料庫存取
介面,只要使用PDO就可以使用相同的方法存取支援
PDO的各種資料庫。
26
27
TableGateway提供使用者透過新增、修改、刪除、
查詢表格內容,更改資料庫之資料。
28
29
30
傳統的程式設計中,程式碼都是順序執行
的,所以很難將一些功能獨立為一個元件
或模組。
事件驅動的設計可以達到這個效果,應用
了事件驅動之後,程式經由“註冊事件”
=> “觸發事件”的運作過程,可以在不影
響原有程式碼前提下,在任意位置加入新
的業務邏輯,讓程式維護及新增的彈性增
強。
其原理使用了Observer pattern(觀察者模式)
一個被觀察者(FB粉絲團)擁有許多觀察者(粉絲) ,當
被觀察者改變時,就會去根據觀察者名單去通知觀察
者,去做更新。
這可以使程式功能間不會因為相依而導致簽一髮動全
身的狀況。
EventManager聚集了許多個觀察者,而這些觀察者是
用來觀察追蹤一個或多個目標物件(被觀察者)的;它
也可以觸發(trigger)事件。
Listener(觀察者)可以被添加(attach)到目標物件(被觀察
者)上,並且須說明若事件觸發需要做什麼事來反應
(可以是任何PHP函式)。
Event(一個事件)指的是可以被EventManager觸發的一
個動作。
初始化設定EventManager
設定每一個事件的識別符號
呼叫SetEventManager的
類別名稱,在這裡為Foo
若有另一類別繼承Foo(例如abc)
並呼叫SetEventManager,則為abc
,若無人繼承則為Foo
使用設定好的EventManager
事件名稱(什麼事情發生了);
物件對象(發生在誰身上);
觸發參數(為什麼會發生)
監聽foo物件是否執行bar動作,當事件觸發
時,就執行一匿名函數function($e)
foo物件執行bar動作了! 所以之
前添加上去的listener會被觸發
此為輸出結果
ServiceManager 的 概 念 來 自 於 “ 服 務 定 位 模 式
(Service locator pattern)”的設計模式。這種模
式是將程式中的每一個獨立功能提取出來作為一
個”服務”,每一個服務都是獨立可喚醒的,只有
服務被調用時,服務相關的程序才會啟動
38
39
40
41
42
Models
Views
Controllers
44
能夠使用不同的View來顯示一樣的資料。(如一
樣的資料可以提供HTML格式、XML格式、
JSON格式...等)
能輕易的改變邏輯控制
幫助程式設計師使用重複的程式碼
幫助不同類型的設計師一起工作(如美工與程式設
計師能針對各自專長的領域,針對同一專案分別
開發)
45
Module下的架構觀念中包含了
MVC。
在專案Album中,src與view下皆
有一個Album,目的在於大型專
案中,在同一個專案中可以分開
不同的Module,使其更為彈性。
由Module Manager管理,一般位
於Module(Album的上一層)根目錄
或Album中,名為Module.php。
46
啟動MVC
◦ Bootstrap引導階段(開啟ServiceManager、註冊所有MVC事件-ZF2、事件
傾聽列表)
◦ Route(路由)
◦ Dispatch(分發)
◦ Render(渲染) 與Finish(結束)
47
Zend\View的構成
◦ View\View(視圖) 主要接管MVC事件
◦ View\Strategy(策略器) 統籌安排視圖的主要容器Placeholders,同時
會將視圖的最終結果放入容器,拼合為最後呈現給用戶的內容
◦ View\Resolver(決策器) 定義模板命名與實際路徑的映射關係,同時
決定模板最終對應的實際文件
◦ View\Renderer(渲染器) 在決策器的輔助下,將ViewModel轉換為文
本輸出。一個渲染器必須對應一個決策器才能工作
◦ View\Model(視圖模型) 包括了視圖中可能用到的所有變量。自身為
樹形結構,一個視圖模型可以包含若干子模型
◦ View\Helper(視圖助手) 輔助生成HTML標籤
48
Zend\View 在Bootstrap的初始化階段
Bootstrap觸發後,視圖做了一些準備工作,包括:
◦ 指定策略器Zend\Mvc\View\DefaultRenderingStrategy定
義Layout,並MvcEvent::EVENT_RENDER事件
◦ Zend\Mvc\View\InjectTemplateListener最主要是透過
Controller和Action來生成默認視圖名
◦ Zend\Mvc\View\InjectViewModelListener(注入視圖模型
監聽)
49
MVC啟動階段
ZendSkeletonApplication/public/index.php中
對應的事件有
◦ Route(路由)
◦ Dispatch(分發)
50
Route(路由)啟動
◦ 以樹型結構排佈
◦ 可設置優先順序
◦ 適合大規模應用的佈署
51
Dispatch(分發)過程
◦ Zend\Mvc\Application中,匹配的RouteMatch透過參數定
位到特定的Controller
◦ Zend\Mvc\Controller將Request/Response注入,以運行對
應的Action
52
發送最終響應並結束MVC
分發結束後,如果正確則從controller獲得響應,
會繼續運行。
53
觸發最後的MVC事件
◦ Render(渲染)
◦ Finish(結束)
Render事件會將Zend\View的各部分整合,最終組
裝成一個Zend\Http\PhpEnvironment\Response,發
送給用戶。
54
Zend/View Helper
◦
◦
◦
◦
◦
Aciton Helper
Partial Helper
Placeholder Helper
Doctype Helper
自定義
55
Action Helper
◦ 產生可重用的內容(例如在頁面中產生一個特定功能的
小面板)
◦ 假設一個CommentController,要輸出
評論列表,帶一個可被調用的listAction()
方法:
56
Partial Helper
◦ Render(解析)可重複的template(面板)片段
◦ 不會有名稱的衝突
Partial.phtml
呈現結果
輸出檔
57
Placeholder Helper
◦ 解決版面上大量且重複的文字充斥於程式碼的困擾
58
Doctype Helper
◦ 指定文檔類型(Doctype 如右)
◦ 在bootstrap中指定(如下)
◦ 輸出
XHTML11
XHTML1_STRICT
XHTML1_TRANSITIONAL
XHTML1_FRAMESET
XHTML_BASIC1
HTML4_STRICT
HTML4_LOOSE
HTML4_FRAMESET
59
全域設定
自訂義
◦ 客製化
◦ 於module.config.php中進行
註冊(如下)
模組設定
模組
模組設置
mvc
模組進入點
在欲輸出的地方(如下)
程式進入點
60
建立名叫”Album”的模組
整個模組結構的目錄如圖:
68
使用MoudleManager
MoudleManager會尋module/Album的路徑找出檔
案Module.php,再從檔案中找出叫Album的
namespace中,名叫Module的class
在zf2-tutorial/module/Album中創建Module.php
69
這兩個方法是負責自動
讀取和設定
70
在zf2-tutorial/module/Album中建立檔案
autoload_classmap.php
autoloader會將從Album這個namespace中所找到的
class,傳回這個空陣列。
71
getConfig()方法會尋著路徑config/module.config.php
載入此檔
在zf2-tutorial/module/Album/config中建立檔案
module.config.php
72
將controller和view
初始化
73
要跟ModuleManager 告知有新模組的存在,必須尋
config/application.config.php路徑去更新此檔案
74
會列出所有收藏,可以新增、修改、刪除它們
每個動作視為一個action,四個動作整合為一個
controller(在這裡是AlbumController),隸屬於
module之下
75
Page
Home
Add new album
Edit album
Delete album
Controller
Action
AlbumController index
AlbumController add
AlbumController edit
AlbumController delete
76
尋zf2-tutorial\module\Album\config\
module.config.php修改此檔案
77
ZF2中controller是一個class,名稱通常叫做
{Controller name}Controller,Controller name 第一
個字母大寫,在這裡就是AlbumController
在zf2-tutorials/module/Album/src/Album/
Controller中建立檔案AlbumController.php
78
把列出、新增、修改、
刪除四個動作加進來
79
在view目錄中建立輸出檔案
module/Album/view/album/album/index.phtml
module/Album/view/album/album/add.phtml
module/Album/view/album/album/edit.phtml
module/Album/view/album/album/delete.phtml
80
建一個叫zf2tutorial的資料庫
以SQL指令建立album資料表並產生資料
81
在zf2-tutorial\module\Album\src\Album\
Model中建立檔案Album.php
82
在module/Album/src/Album/Model中建立檔案
AlbumTable.php
83
抓出所有資料
抓出單筆資料
在資料庫中建立新一列
資料,或直接更新原本
已存在的一列資料
刪除單筆資料
84
先設定ModuleManager
尋zf2-tutorial\module\Album\Moudle.php路徑修改
此檔案
85
getServiceConfig()方法使用一個
factory建立AlbumTable物件
在這裡才產生資料表物件
服務名稱1
服務名稱2
用來存放資料操作後
所得到的資料集合
86
尋\zf2-tutorial\config\autoload\global.php路徑修改此
檔案
設定DB和ServiceManager
設定DB
設定ServiceManager
87
尋\zf2-tutorial\config\autoload\global.php路徑修改此
檔案
帳號
密碼
88
加入getAlbumTable() 方法,可以抓到從
ServiceManager 來的AlbumTable
在AlbumController類別中加入getAlbumTable()方
法(尋zf2-tutorial
/module/Album/src/Album/Controller/
AlbumController.php修改此檔案 )
89
加入這個方法
去ServiceLocator裡抓出名稱為
Album\Model\AlbumTable 的服務
在class最上方加上這個變數
90
尋zf2-tutorial
/module/Album/src/Album/Controller/
AlbumController.php修改此檔案
修改這個方法
91
尋zf2-tutorial/module/Album/view/album/
album/index.phtml路徑修改此檔案
92
讓使用者可以從表單中填入資訊
尋zf2-tutorial/module/Album/
src/Album/Form/路徑建立AlbumForm.php
93
94
尋zf2-tutorial/module/Album/
src/Album/Model/Album.php修改此檔案
95
96
尋zf2-tutorial/module/Album/src/Album/
Controller/AlbumController.php修改此檔案
修改這個方法
97
尋zf2-tutorial/module/Album/view/album/
album/add.phtml路徑修改此檔案
98
尋zf2-tutorial/module/Album/src/Album/
Controller/AlbumController.php修改此檔案
修改這個方法
99
尋zf2-tutorial/module/Album/view/album/
album/edit.phtml路徑修改此檔案
10
0
尋zf2-tutorial/module/Album/src/Album/
Controller/AlbumController.php修改此檔案
修改這個方法
10
1
尋zf2-tutorial/module/Album/view/album/
album/delete.phtml路徑修改此檔案
10
2
優點
◦ 文件架構遵守結構化的設計,適合大型專案分工
◦ 本身功能強大,且相當常更新,想的到的幾乎都有
◦ 有許多大公司的支援,能使用許多的公司提供的工具
缺點
◦ 文件架構複雜較不適合初學者,以及小型開發
◦ 太常更新,且版本大更動時,新舊會不相容
10
3
THE END