Category Archives: ZendFramework

[ZF]透過 PEAR 安裝 Zend Framework v1 (ZF tools)

ZendFramework除了手動建立專案之外,也可以透過PEAR安裝ZF的tools,這樣一來在建立專案時就方便許多(不過如果有需要切換不同的ZF版本的話,還是建議手動建立)

PEAR安裝

如果要升級ZF版本也可以直接更新

最後在自己的家目錄建立設定檔,引入PEAR的路徑

這樣就可以直接透過zf指令產生專案了

在專案中新增controller

在專案中開啟layout

指令其他參數可以參考help

Continue Reading

[ZF]Zend Framework Session應用

ZF有提供一個Zend_Session的module來負責處理Session部份,Zend_Session其實也是直接利用PHP原本的$_SESSION存取,但是不建議在ZF中直接存取$_SESSION。

另外Zend_Session中也有Namespace的機制,可以避免到Session變數的衝突

基本用法

Continue Reading

[ZF]Zend Framework Context 輸出

在某些時候,需要Action來輸出例如xml等格式

這時候就可以透過contextSwitch()來選擇你要輸出的格式

首先在Controller中加入init()函式,選擇你想要的輸出格式 indexController

其中json可以直接輸出,不需要再令外的view來顯示 只要用http://url/Zend/?format=json 就可以看到

除了json之外,其他格式例如成xml,必須再做一個樣板 樣板名稱就是以Action名稱.格式.phtml 以範例indexAction來說,需要在views/scripts/index/(也就是放index.phtml的目錄)裡再新增一個index.xml.phtml

index.xml.phtml

輸入http://url/Zend/?format=xml就可以看到結果

除了這兩樣格式之外,如果要新增其他格式,例如RSS格式,就必須自訂Context indexController

同樣要另外寫一個樣板 index.rss.phtml

除了上述那些格式,如果有使用到Ajax時,因為contextSwitch裡是沒有註冊HTML context的,必須使用AjaxContext

AjaxContext的context-suffix是ajax,所以必須再建立index.ajax.phtml

輸入http://url/Zend/?format=html就可以看到結果

Continue Reading

[ZF]View Helper – BaseUrl

在使用ZF時,如果在layout要引入css時,常常會遇到路徑出錯,或者想要用同一個layout但卻要引入不同的css

要克服這個問題就要先在Controller端先處理

Zend_View也支援View Helper。View Helper能協助我們快速地對樣版上的元素做處理

以BaseUrl為例,BaseUrl可以幫助我們取得根目錄的路逕

首先要先在application/config/application.ini加入路徑

使用方法(輸出根目錄路逕)

實際使用範例: FooController

layout.phtml

Continue Reading

[ZF]Zend Framework v1 初探

最近因為工作需要用到ZF,所以就來摸一下 Zend Framework是php裡頭其中一種Framework,因為它實作的是按照MVC架構做的,所以要先把MVC的概念看懂, 可以參考維基寫的MVC

建立目錄架構: 首先把網站目錄結構建成(目錄結構規劃不一定要參照這個方式):

另外設個DNS指到Project/public這個目錄

下載Zend Framework: 接著下載Zend Framework 他有 Full 跟 minimal 兩個版本,建議是下載Full,下載下來後解壓縮並把 /(Zend_Framework)/library/Zend整個目錄複製到你的Project/library下

建立index: 我們先在Project/public底下建立一個index.php,這支index.php的用途就是把除了靜態檔案以外,把其他的request都交給Zend Framework來處理,所以記得要把Rewrite的功能開起來。

首先在Project/public底下建一個.htaccess,填入以下內容:

這段Rewrite的設定就是將所有目錄、檔案以外的URL都交給index.php處理,比如http://localhost/img/a.png便會直接吐內容,如果是http://localhost/foo/bar這類的就會丟給index.php處理

RewriteCond指令定義了規則生效的條件,也就是說RewriteCond要符合才會跑RewriteRule -s:測試路徑名稱是否存在 -l:測試路徑名稱並確認是否有一個存在的符號連接 -d:測試路徑目錄是否存在

接著要設定index.php的內容:

Action Controller: 先在Project/application/controllers裡面建一個IndexController.php,在Zend Framework裡可以將request都交由front controller下的dispatcher來決定要交由哪個action controller來處理,所以controller命名的方式就是URL名稱(開頭大寫)Controller.php。例如http://DNS/foo就會去執行FooController的indexAction;http://DNS/foo/bar就是執行FooController的barAction。如果將Action命名成testOneAction,則DNS會對應成test-one

接著在IndexController.php輸入以下內容:

這時只要輸入http://DNS/就可以看到畫面顯示出hello from Index#index的字串

View Script: 剛剛上述Action的作法,只是拿來測試controller是否正常執行,事實上是不符合MVC架構的,controller是拿來運算而非拿來顯示的,顯示的部份必須由view來執行! 在Zend Framework中,action controller預設都會有一個view renderer來負責顯示的工作,他會根據controller/action的名稱去找application/views/scripts/controller_name/action.phtml來顯示,例如剛剛上述的IndexController/indexAction就會去找index/index.phtml,所以先在application/views/scripts底下建一個index目錄,index的目錄裡再建一個index.phtml 再將Project/application/controllers/IndexController.php改成以下內容:

接著輸入Project/application/views/scripts/index/index.phtml內容:

這樣http://DNS/就會顯示出日期了

URL Routing: 上面有提過Controller和Action的命名方式,現在來實作一下 http://DNS/foo 和 http://DNS/foo/bar

Continue Reading