安裝Zend框架和Zend_第1頁
安裝Zend框架和Zend_第2頁
安裝Zend框架和Zend_第3頁
安裝Zend框架和Zend_第4頁
安裝Zend框架和Zend_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、安裝Zend框架和Zend_ToolZend Framework 配置要求· PHP版本大于PHP 5.2.4。· Web 服務(wù)器支持重寫,如Apache mod_rewrite。· 服務(wù)器開啟重寫功能,如Apache bbb.conf 配置文件,需設(shè)置AllowOverride None 改為 AllowOverride All,以支持.htaccess 文件。Zend Framework 安裝這里以Ubuntu為例(其他Linux/Unix系統(tǒng)類似)。首先到Zend 官網(wǎng) 下載最新Zend Framework。版本選擇:Zend

2、Framework 1.11.11 Minimal 即可,Zend Framework 1.11.11 Full 包括額外的庫(/extras/library/ZendX/),以及一些demo等,有需要可下載Full版本)wget bbb:/framework.zendaaa/releases/ZendFramework-1.11.11/ZendFramework-1.11.11-minimal.tar.gz下載完成可解壓到想要的任意目錄。比如/usr/share/:sudo tar -zxvpf ZendFramework-1.11.11-minimal.tar.gz -C /usr/sha

3、re添加Zend library解壓以后,要設(shè)置確保解壓文檔中 Zend Framework 的 library 目錄在 php 配置的 inclue_path 變量的目錄下。大概有三種方法:1. 執(zhí)行 php -i | grep include_path 得知當(dāng)前php的include_path路徑,比如/usr/share/php,再將library目錄下的Zend文件夾整個復(fù)制/移動到/usr/share/php/目錄下。2. 修改php.ini 配置,將解壓后的library目錄路徑添加到include_path變量中,(php.ini

4、文件路徑查詢:php -i | grep php.ini;注意ubuntu 11.04是將用于cli和Apache的 php.ini 配置文件分開的,cli是/etc/php5/cli/php.ini,Apache是/etc/php5/apache2/php.ini)。而我們要在/etc/php5/apache2/php.ini文件中PHP部分加入一行:include_path = ".:/usr/share/ZendFramework-1.11.11-minimal/library"在Web前臺測試時,如果修改了php.ini 文件,要重啟Apache

5、,改動的設(shè)置才會生效)。3. 第三種方法是不用將Zend的library添加到include_path中,而是在創(chuàng)建zf項目后,將library/Zend 目錄復(fù)制到(或軟鏈接到)項目的library 目錄下(下一節(jié)將介紹)。添加Zend Framework命令行工具我們看到解壓的Zend Framework 文檔目錄中還有一個bin目錄,這是配置ZF命令行工具的腳本,把里面的zf.sh可執(zhí)行文件復(fù)制到ubuntu系統(tǒng)的可執(zhí)行目錄下就行。當(dāng)然也可以不復(fù)制或移動文件,在系統(tǒng)可執(zhí)行目錄下使用軟鏈接將bin鏈接到這個zf.sh文件。比如我們把它放在和php的bin目錄同一級(php目錄查詢which

6、 php):sudo ln -s /usr/share/ZendFramework-1.11.11-minimal/bin/zf.sh /usr/bin/zf然后在命令行終端執(zhí)行zf show version測試,顯示Zend Framework Version: 1.11.11,則表明zf命令行工具安裝配置完成。若是Windows 系統(tǒng),Zend tool 的設(shè)置請見: Windows設(shè)置Zend Framework 命令行工具.創(chuàng)建Zend Framework 項目上一節(jié)我們安裝配置了Zend 框架,現(xiàn)在我們可以開始創(chuàng)建Zend Framework 項目了。本教程以創(chuàng)建一個保存音

7、樂專輯的Web 簡單應(yīng)用為例。下面是這個web應(yīng)用的簡單需求:· 首頁:顯示專輯列表,并為每張專輯顯示編輯/刪除的鏈接,以及添加新專輯的鏈接。· 添加新專輯:提供一個添加新專輯的表單。· 編輯專輯:顯示一個編輯專輯的表單。· 刪除專輯:確認(rèn)刪除并刪除專輯功能。相應(yīng)地設(shè)計數(shù)據(jù)庫結(jié)構(gòu)如下(音樂專輯包括artist藝術(shù)家和title專輯名稱):Field nameTypeNull?NotesidintegerNoPrimary key, auto incrementartistvarchar(100)Notitlevarchar(100)No開始創(chuàng)建ZF應(yīng)用在

8、命令行窗口跳轉(zhuǎn)到Web服務(wù)器根目錄,使用zend framework 命令行工具zf命令創(chuàng)建一個project 項目,比如名稱為zftest:cd /var/wwwzf create project zftest提示:Note: This command created a web project, for more information setting up your VHOST, please see docs/READMETesting Note: PHPUnit was not found in your include_path, therefore no testing acti

9、ons will be created.原來Zend Framework 開始官方支持PHPUnit了,Pear安裝PHPUnit單元測試:bbb:/pear.phpunit.de/sudo apt-get install php-pearsudo pear channel-discover pear.phpunit.desudo pear channel-discover pear.symfony-projectaaasudo pear upgrade (Note:phpunit/PHPUnit requires PEAR Installer (version >= 1.9.4), i

10、nstalled version is 1.9.1)sudo pear install phpunit/PHPUnit上面的Zend_Tool 命令行工具zf create project 創(chuàng)建項目時自動創(chuàng)建了各級目錄和文件,仔細(xì)看下:· zftest/application 這是zf的主體程序文件,包括配置文件、MVC的3個目錄controllers/models/views、Bootstrap.php。· zftest/docs 這是程序文檔或手寫的記錄備忘等,實際應(yīng)用中不上傳。· zftest/library 這是上一節(jié)說到的添加Zend library的第

11、三種方法,如· cd /var/www/zftest/library;ln -s /usr/share/ZendFramework-1.11.11-minimal/library/Zend· zftest/public 這是網(wǎng)站根目錄訪問路徑。ls -a  ./public可以看到還有一個隱藏的.htaccess文件。· zftest/tests 測試目錄。服務(wù)器配置文件比如Ubuntu 下配置apache:sudo vi /etc/apache2/sites-available/zftest,將docs/README.txt 中的vhost配

12、置復(fù)制進去并保存:<VirtualHost *:80> DocumentRoot "/var/www/zftest/public" ServerName zftest.local # This should be omitted in the production environment SetEnv APPLICATION_ENV development<Directory "/var/www/zftest/public"> Options Indexes MultiViews FollowSymLinks AllowOverr

13、ide All Order allow,deny Allow from all </Directory></VirtualHost>sudo a2ensite zftestsudo /etc/init.d/apache2 reload修改/etc/hosts 把zftest.local 指向。訪問bbb:/zftest.local (或bbb:/localhost/zftest/public/) 就能打開顯示zf圖標(biāo)的頁面了。zftest 這個Zend Framework 項目就算創(chuàng)建好了。如果,不在本地測試,可以在apache2建立項目配置文件因為a

14、pache默認(rèn)的web主目錄在/var/www下為了能夠讓apache自動定位到指定目錄下的web應(yīng)用,在/etc/apache2/conf.d中建立一個關(guān)于項目的配置文件,稱為zftest.confCommand line: sudo gedit /etc/apache2/conf.d/zftest.conf文件內(nèi)容如下: <IfModule alias_module> Alias /zftest "/home/”xxx“/ZFTest/public/" <Directory "/home/”xxx“/ZFTest

15、/public/"> Allow from all RewriteEngine on RewriteBase /zftest RewriteCond %REQUEST_FILENAME !-f RewriteRule !.(css|js|jpg|gif|png|swf|flv)$ index.php Options FollowSymlinks MultiViews AllowOverride All </Directory> </IfModule> 修改

16、public里的.htaccess文件。.htaccess是隱藏文件,可通過查看顯示隱藏文件。文件內(nèi)容如下: RewriteEngine On RewriteBase /zftest RewriteCond %REQUEST_FILENAME -s OR RewriteCond %REQUEST_FILENAME -l OR RewriteCond %REQUEST_FILENAME -d RewriteRule .*$ - NC,L RewriteRule .*$ index.php NC,L Zend Fram

17、ework 引導(dǎo)啟動 BootstrappingZend Framework 的控制器使用前臺控制器(Front Controller)的設(shè)計模式,將所有的前臺請求都由路由引導(dǎo)到單一的index.php文件入口。這確保了運行應(yīng)用程序能夠建立一個穩(wěn)定無誤的環(huán)境。ZF框架是通過zftest/public/.htaccess文件的設(shè)置將所有請求都跳轉(zhuǎn)到zftest/public/index.php的,這和 WordPress 等開源應(yīng)用程序很像。這個index.php 文件是應(yīng)用程序的入口,它用于創(chuàng)建一個Zend_Application的實例,并進行程序初始化后運行。這個文件同樣定義了兩個常量:AP

18、PLICATION_PATH 和 APPLICATION_ENV,分別用于定義 application/ 的路徑和程序運行環(huán)境模式。index.php中默認(rèn)設(shè)置的是production,不過我們已經(jīng)在上面vhost的配置文件中設(shè)置了 SetEnv APPLICATION_ENV development,(這也可以在.htaccess文件中設(shè)置)。Zend_Application 組件用于啟動應(yīng)用程序,并用于在配置文件application/configs/application.ini 中設(shè)置使用指令。在application/Bootstrap.php 文件中提

19、供了一個擴展 Zend_Application_Bootstrap_Bootstrap 的 Bootstrap 引導(dǎo)類,用于執(zhí)行任何必須的指定代碼。文件 application/configs/application.ini 使用Zend_Config_Ini 組件加載,Zend_Config_Ini 組件知道文件中使用冒號分不同模式繼承的邏輯。比如staging : production表示 staging 段繼承了production 模式的設(shè)置。APPLICATION_ENV 常量定義了我們的程序要加載哪一個環(huán)境。在程序開發(fā)中我們使用development 環(huán)境,而在實際應(yīng)用環(huán)境中,我們

20、使用 production。因為前面我們設(shè)置的環(huán)境是production,所有放在 application.ini 的 production 部分的設(shè)置,就可以立即加載這些改變的配置了。最后,我們可能還可以通過 application.ini 修改當(dāng)?shù)貢r區(qū),在production 部分,所有的 phpSettings 值之后加入:phpSettings.date.timezone = “Asia/Shanghai”設(shè)置時區(qū)為北京時間。Zend Framework 控制器 Controller前面Zend Framework 教程各章節(jié),了解了ZF配置和大概的MVC模型之后,我們可以開始嘗試編寫

21、應(yīng)用程序代碼了。首先談下Zend Framework是如何組織每個頁面的。zf應(yīng)用程序的每個頁面被當(dāng)作一個action,多個action 組成 一個controller 即控制器。比如bbb:/zftest.local/news/view 這個網(wǎng)址(或者bbb:/localhost/zftest/public/news/view),News是controller,而view是action。News 控制器可能同時還有l(wèi)ist,archived等其他的action。ZF的MVC設(shè)計模式同時也支持將多個控制器通過模塊modules 的形式組織起來,不過本教程比較簡單還沒有必要那么做。Zend Fr

22、amework 默認(rèn)情況下會使用index作為默認(rèn)的action,比如bbb:/zftest.local/news/這個url,News控制器中的index action將會被執(zhí)行。同樣控制器也有默認(rèn)的,bbb:/zftest.local/這個網(wǎng)址將執(zhí)行Index controller中的index view。在這個Zend Framework教程開始,我們先不考慮比如用戶登錄等相對復(fù)雜的東西,在教程的結(jié)尾會有更多的介紹。因為本教程只涉及管理專輯的4個頁面。因此我們可以將4個頁面當(dāng)作一個controller的4個action。比如:頁面ControllerActionHome pageInde

23、xindexAddNew albumIndexaddEdit albumIndexeditDelete albumIndexdelete越復(fù)雜的網(wǎng)站將會有更多的controllers,或者將多個controller 通過modules 組織起來。Zend Framework 創(chuàng)建 Controller現(xiàn)在我們可以開始創(chuàng)建Controller了,在Zend Framework 中 Controller 必須是一個命名為Controller nameController的類,其中控制器名稱 Controller name 必須大寫字母開頭。這個類必須寫在 application

24、/controllers/Controller nameController.php 文件中。而每一個 action 則是 controller 類中一個命名為action nameAction 的public 函數(shù),其中action名稱 action name 全部字母必須小寫。所以我們的controller類應(yīng)該是 application/controllers/IndexController.php 文件中命名為 IndexController 的類,從前面的文件結(jié)構(gòu)我們看到這個文件Zend_Tool已經(jīng)幫我們創(chuàng)建好了,打開這個文件發(fā)現(xiàn)IndexContro

25、ller 類也已經(jīng)自動創(chuàng)建。接下來我們使用zf命令行工具創(chuàng)建IndexController控制器的其他actions。打開命令行環(huán)境并cd到zftest目錄,執(zhí)行命令zf create action add Indexzf create action edit Indexzf create action delete Index這些命令會在IndexController 類中創(chuàng)建3個方法:addAction, editAction 和 deleteAction,同時也會創(chuàng)建相應(yīng)的view 代碼文件(后面會用到)?,F(xiàn)在我們就算已經(jīng)創(chuàng)建好要用到的4個actions 了。每一個action對應(yīng)的ur

26、l如下:URL Action methodbbb:/zftest.local/ IndexController:indexAction()bbb:/zftest.local/index/add IndexController:addAction()bbb:/zftest.local/index/edit IndexController:editAction()bbb:/zftest.local/index/delete IndexController:deleteAction()訪問上面的url會看到輸出類似的文本:View script for controller Index and sc

27、ript/action name add。如果出現(xiàn)404錯誤頁面,那可能是你還沒有配置Apache 的mod_rewrite 模塊,或者沒有正確地設(shè)置 AllowOverride all (Apache配置文件,.htaccess文件)。Zend Framework 數(shù)據(jù)庫和Models上一節(jié)我們創(chuàng)建了含有幾個action 函數(shù)的 IndexController.php 文件,了解了zf application 應(yīng)用的大概架構(gòu),現(xiàn)在輪到model部分了。model 是處理application應(yīng)用的業(yè)務(wù)規(guī)則核心部分(“business rule”),在我們的教程中,這也就是數(shù)據(jù)庫。我

28、們將使用Zend Framework 的 Zend_Db_Table類來查找/插入/更新或刪除數(shù)據(jù)庫中的行。MySQL數(shù)據(jù)庫配置為了使用 Zend_Db_Table,我們要告訴zf使用哪個數(shù)據(jù)庫,以及用戶名和密碼。Zend Framework的Zend_Application 組件自帶了一個數(shù)據(jù)庫配置文件application/configs/application.ini,我們在這個文件中配置數(shù)據(jù)庫相關(guān)信息。打開application.ini 文件,在production 部分的末尾加入以下設(shè)置(數(shù)據(jù)庫名稱、用戶名、密碼換成你自己的):resources.db.adapter =

29、PDO_MYSQLresources.db.params.host = localhostresources.db.params.username = rootresources.db.params.password = mysqlpasswordresources.db.params.dbname = zendframeworktutorial數(shù)據(jù)庫將會自動創(chuàng)建Mysql數(shù)據(jù)庫連接,Zend_Db_Table 默認(rèn)的adapter也會創(chuàng)建。Zend官網(wǎng)有其他可用的resource 插件介紹:bbb:/framework.zendaaa/manual/en/zend.application.a

30、vailable-resources.html創(chuàng)建數(shù)據(jù)庫表我們將使用MySQL數(shù)據(jù)庫來保存專輯信息,MySQL創(chuàng)建數(shù)據(jù)庫以及albums表的SQL語言如下:CREATE DATABASE IF NOT EXISTS zftest default charset utf8 COLLATE utf8_general_ci;use zftest;CREATE TABLE albums (id int(11) NOT NULL auto_increment,artist varchar(100) NOT NULL,title varchar(100) NOT NULL,PRIMARY KEY (id)

31、;在phpmyadmin 等MySQL客戶端或標(biāo)準(zhǔn)的MySQL 命令行界面運行上面的語句。插入數(shù)據(jù)為了演示案例,我們在數(shù)據(jù)庫表中再插入一些樣本數(shù)據(jù),執(zhí)行SQL語句:INSERT INTO albums (artist, title)VALUES('Paolo Nutine', 'Sunny Side Up'),('Florence + The Machine', 'Lungs'),('Massive Attack', 'Heligoland'),('Andre Rieu', '

32、;Forever Vienna'),('Sade', 'Soldier of Love');我們有數(shù)據(jù)保存在數(shù)據(jù)庫中了,下面我們可以寫一個簡單的model。關(guān)于 Zend_Db_Table 和 Zend_Db_Table_AbstractZend Framework 沒有提供 Zend_Model 這個類,因為model是你的業(yè)務(wù)邏輯,這主要由你來決定它怎么工作。不過zf根據(jù)你的需求提供了許多組件可供使用幫助完成工作。一種方法是使用model類來表示zf應(yīng)用中的每一個實體(entity),并使用 mapper 對象加載或保存這個實體到數(shù)據(jù)庫中。這種方法在

33、zf官方教程中有詳細(xì)介紹:bbb:/framework.zendaaa/manual/en/learning.quickstart.create-model.html。在這個教程中,我們將創(chuàng)建一個擴展Zend_Db_Table類的 model 并使用 Zend_Db_Table_Row。Zend Framework 提供了實現(xiàn)Table DataGateway設(shè)計模式的 Zend_Db_Table,用來和數(shù)據(jù)庫中的數(shù)據(jù)進行交互。注意Table Data Gateway 設(shè)計模式在更大型的系統(tǒng)中是有局限性的。同時Zend_Db_Table 也很容易使我們將數(shù)據(jù)庫訪問代碼放到controller

34、的action方法中。Zend_Db_Table_Abstract 是一個抽象類,從這個抽象類中我們可獲得用于管理專輯的類。雖然我們可以任意命名我們的類,但根據(jù)數(shù)據(jù)庫表來命名會更有意義一些。我們的project項目有一個由 Zend_Application 實例化的自動加載器,它將一個模塊下里面的資源類(resource classes)映射到定義它的目錄中。主文件夾application/ 使用Application_前綴。自動加載器使用映射將資源和目錄對應(yīng)起來,如:前綴 - 目錄Form -formsModel -modelsModel_DbTable -models/DbTableMod

35、el_Mapper -models/mappersPlugin -pluginsService -servicesView_Filter -views/filtersView_Helper -views/helpers因為我們是根據(jù)數(shù)據(jù)庫表命名albums,并使用Zend_Db_Table的,我們的類將會以 Application_Model_DbTable_Albums 命名,保存在applications/models/DbTable/Albums.php 文件中。為了告訴 Zend_Db_Table 要管理哪個表,我們要為表名稱設(shè)定protected 屬性 $_name。同樣,Zend_

36、Db_Table 會認(rèn)為數(shù)據(jù)庫表有一個名為id自動遞增的主鍵,這個field的名稱如果有需要也可以更改。使用zf命令行工具:zf create db-table Albums albums文件 applications/models/DbTable/Albums.php 將會被創(chuàng)建,在這個文件中有一個名為 Application_Model_DbTable_Albums 的類,并設(shè)定了和這個類交互的數(shù)據(jù)庫表的名稱?,F(xiàn)在我們要編輯 application/models/DbTable/Albums.php 文件以增加一些功能,models中的文件通常是和數(shù)據(jù)庫交互(讀取/插入/編輯/刪除數(shù)據(jù)庫表

37、中的數(shù)據(jù)信息),我們添加 getAlbum(), addAlbum(), updateAlbum() 和 deleteAlbum() 這幾個方法如下:<?phpclass Application_Model_DbTable_Albums extends Zend_Db_Table_Abstractprotected $_name = 'albums'public function getAlbum($id)$id = (int)$id;$row = $this->fetchRow('id = ' . $id);if (!$row) throw new

38、 Exception("Could not find row $id");return $row->toArray();public function addAlbum($artist, $title)$data = array('artist' => $artist,'title' => $title,);$this->insert($data);public function updateAlbum($id, $artist, $title)$data = array('artist' =>

39、$artist,'title' => $title,);$this->update($data, 'id = '. (int)$id);public function deleteAlbum($id)$this->delete('id =' . (int)$id);上面我們創(chuàng)建了4個用于和數(shù)據(jù)庫表交互的helper 方法。 getAlbum() 以數(shù)組的形式獲取一個單一行, addAlbum() 在數(shù)據(jù)庫中創(chuàng)建一個新行, updateAlbum() 更新一個數(shù)據(jù)庫行,deleteAlbum() 刪除一個整行。你也可以告

40、訴 Zend_Db_Table 其他相關(guān)數(shù)據(jù)庫表并獲取相關(guān)的數(shù)據(jù)。下面我們要在controllers 中填入models 中的數(shù)據(jù),以及編寫view 腳本代碼顯示它。在這之前,我們先來看看 Zend Framework的view 系統(tǒng)是如何工作的。Zend Framework布局和視圖 Layouts viewsZend Framework 的view 組件是Zend_View。這個view 組件的功能是將action函數(shù)中的代碼和顯示頁面的代碼分開寫。Zend_View 工作原理Zend_View 的基本使用方法是:$view = new Zend_View();$view->setS

41、criptPath('/path/to/scripts');echo $view->render('script.php');很明顯,如果我們把這段代碼放到每一個action函數(shù)里面,將會產(chǎn)生很多不是很有意義的重復(fù)代碼。我們希望在其他地方對view 進行初始化,然后在每個action 函數(shù)里面訪問那些已經(jīng)初始化的view 對象。Zend Framework 為此提供了一個叫 ViewRenderer 的 Action Helper。它負(fù)責(zé)在controller($this->view) 中初始化view 屬性,并在action執(zhí)行后渲染 view 代

42、碼。對于渲染過程,首先 ViewRenderer 創(chuàng)建 Zend_View 對象,該對象會在 views/scripts/controller name 目錄中查找和 action 名字相同,后綴為.phtml 待渲染的的view 腳本。也就是查找渲染的view 腳本為 views/scripts/controller name/action_name.phtml,要呈現(xiàn)的內(nèi)容被添加到Response 對象的body中。Response 對象用于收集所有的 bbb headers,body content 以及使用MVC模型產(chǎn)生的異常。然后前臺控制器在最后調(diào)用的body content后面發(fā)送

43、headers。這整個render的過程,Zend_Tool 在創(chuàng)建項目、或使用zf create controller 和 zf create action 添加controllers控制器、action 的時候,就已經(jīng)幫我們完成了。通用的HTML 代碼:Layouts很明顯在views 文件中會有很多通用的HTML 代碼,比如頁面上重復(fù)的header 部分和footer部分,甚至sidebar邊欄等。這是一個很常見的問題,Zend 框架使用 Zend_Layout 解決這個問題。Zend_Layout 可以允許我們將通用的header、footer和其他代碼移動到布局視圖文件代碼中,這個布

44、局視圖代碼中包含為要執(zhí)行的action指定的view 代碼。布局文件默認(rèn)放在application/layouts/ 目錄,不過 Zend_Application 允許我們配置Zend_Layout這個資源。我們使用Zend_Tool 創(chuàng)建布局視圖代碼,它同時還知道如何正確地更新 application.ini 文件。在zftest 目錄中我們執(zhí)行下面的命令:zf enable layout現(xiàn)在Zend_Tool 已經(jīng)創(chuàng)建了 application/layouts/scripts 文件夾,并在里面創(chuàng)建了一個layout.phtml 文件,同樣也更新了application.ini文件,注意到是

45、在production部分添加了一行:resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"在controller action 方法結(jié)束之后,也就是整個調(diào)用循環(huán)的最后,Zend_Layout 將會渲染指定的layout。Zend_Tool 啟用layout時,創(chuàng)建的是一個最基礎(chǔ)的布局文件,只有一行代碼用以顯示action的view腳本:<?php echo $this->layout()->content; ?>下面我們添加網(wǎng)站必須的一些代碼,打開layouts.phtm

46、l 文件用下面的代碼替換:zf-tutorial/application/layouts/scripts/layout.phtml<?php$this->headMeta()->appendbbbEquiv('Content-Type', 'text/html;charset=utf-8');$this->headTitle()->setSeparator(' - ');$this->headTitle('Zend Framework Tutorial');echo $this->doct

47、ype(); ?><html xmlns="bbb://1999/xhtml" xml:lang="en" lang="en"><head><?php echo $this->headMeta(); ?><?php echo $this->headTitle(); ?></head><body><div id="content"><h1><?php echo $this->

48、escape($this->title); ?></h1><?php echo $this->layout()->content; ?></div></body></html>這個布局文件包含非常標(biāo)準(zhǔn)的“外包”的HTML 代碼。因為這是一個普通的PHP 文件,我們可以在里面寫php代碼。里面有一個$this變量,它是在bootstrapping過程中創(chuàng)建的view 對象的一個實例。我們可以使用它來獲取已經(jīng)賦值給view 的數(shù)據(jù),以及調(diào)用方法。這個方法(即view helpers)返回我們可以輸出的字符串。首先我

49、們?yōu)閣eb網(wǎng)頁的head部分配置一些view helpers 方法,然后輸出正確的doctype。在<body>部分,我們創(chuàng)建一個div及包含title的<h1>標(biāo)簽。為了獲取當(dāng)前action要顯示的view 代碼,我們使用echo $this->layout()->content;這個layout() view helper的內(nèi)容占位符。這表明action的view 代碼是在layout的view代碼之前執(zhí)行的。在渲染任何view 腳本之前,我們要為網(wǎng)頁設(shè)置好doctype。因為action的 view腳本更早執(zhí)行,它必須知道現(xiàn)在使用的是哪一個doctyp

50、e。對于Zend_Form也是如此。那么在哪里設(shè)置 doctype 呢?打開 application.ini文件,在production部分添加一行:resources.view.doctype = "XHTML1_STRICT"doctype() 這個view helper 現(xiàn)在就可以輸出正確的doctype了,然后 Zend_Form 等組件生成和它相兼容的HTML 代碼。Zend Framework 教程 添加樣式文件上一節(jié)介紹了zend framework 的layout 布局文件,現(xiàn)在我們?yōu)楸窘坛讨械膶嵗砑右恍〤SS 樣式,讓應(yīng)用看起來更像樣一些。因為應(yīng)用中 U

51、RL 并沒有明確指向正確的根目錄,那我們應(yīng)該如何指定CSS文件的路徑呢(其他靜態(tài)文件也一樣)?zf提供了一個叫baseUrl() 的view helper。這個helper 從請求的對象中收集必要的信息,然后提供給我們不清楚的 URL 的位置。在布局文件 application/layouts/scripts/layout.phtml 的<header> 部分添加CSS文件。我們使用headLink()這個view helper:zf-tutorial/application/layouts/scripts/layout.phtml.<head><?ph

52、p echo $this->headMeta(); ?><?php echo $this->headTitle(); ?><?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/site.css'); ?></head>.通過使用headLink() 的 prependStylesheet() 方法,我們可以在<head>部分,site.css 后面添加任何其他指定的CSS 文件。然后我們在public/目錄下

53、創(chuàng)建css 目錄,里面創(chuàng)建 site.css文件:zf-tutorial/public/css/site.cssbody,html margin: 0 5px;font-family: Verdana,sans-serif;h1 font-size: 1.4em;color: #008000;a color: #008000;/* Table */th text-align: left;td, th padding-right: 5px;/* style form */form dt width: 100px;display: block;float: left;clear: left;for

54、m dd margin-left: 0;float: left;form #submitbutton margin-left: 100px;因為我們已經(jīng)創(chuàng)建并設(shè)置了布局文件,現(xiàn)在就可以清空 application/views/scripts/index目錄中zf 自動創(chuàng)建的4個view 文件中的默認(rèn)代碼了(index.phtml, add.phtml, edit.phtml 和 delete.phtml),開始編寫自己的view 視圖代碼。Zend Framework 教程 顯示專輯列表前面我們已經(jīng)設(shè)定了各項Zend 框架配置,MySQL數(shù)據(jù)庫信息,models 結(jié)構(gòu)和 view 架構(gòu),可以開

55、始嘗試顯示一些專輯列表了。我們知道MVC模型中業(yè)務(wù)邏輯是在controller控制器中實現(xiàn)的。所以我們在IndexController 類中完成這個任務(wù),使用zf 在IndexController 類中自動創(chuàng)建的 indexAction() 來列出專輯目錄:zf-tutorial/application/controllers/IndexController.php.function indexAction()$albums = new Application_Model_DbTable_Albums();$this->view->albums = $albums->fetc

56、hAll();.我們實例化一個基于 table data gateway 的model實例。fetchAll() 函數(shù)返回一個Zend_Db_Table_Rowset,它可以讓我們在action的view腳本文件中迭代輸出返回的各行?,F(xiàn)在我們在相應(yīng)的view 腳本index.phtml文件中填入以下代碼:zf-tutorial/application/views/scripts/index/index.phtml<?php$this->title = "My Albums"$this->headTitle($this->title);?><

57、;p><a href="<?php echo $this->url(array('controller'=>'index','action'=>'add');?>">Add new album</a></p><table><tr><th>Title</th><th>Artist</th><th>&nbsp;</th></tr>

58、<?php foreach($this->albums as $album) : ?><tr><td><?php echo $this->escape($album->title);?></td><td><?php echo $this->escape($album->artist);?></td><td><a href="<?php echo $this->url(array('controller'=>&

59、#39;index','action'=>'edit', 'id'=>$album->id);?>">Edit</a><a href="<?php echo $this->url(array('controller'=>'index','action'=>'delete', 'id'=>$album->id);?>">Delete<

60、;/a></td></tr><?php endforeach; ?></table>上面的view腳本首先設(shè)定頁面標(biāo)題(在layout 的內(nèi)容中使用),并使用 headTitle()  這個view helper 設(shè)置<head>部分的title屬性(顯示在瀏覽器頁面的標(biāo)題欄),然后創(chuàng)建一個添加新專輯的鏈接。Zend framework 提供了url() 這個 view helper,幫助創(chuàng)建包括正確的base URL 的鏈接。我們只需簡單地傳遞一個參數(shù)數(shù)組,zf會完成剩下的工作。然后我們創(chuàng)建一個html 表

61、格,用以顯示每張專輯的title 標(biāo)題,artist 藝術(shù)家,并顯示編輯和刪除記錄的鏈接。上面使用了一個標(biāo)準(zhǔn)的foreach循環(huán): 迭代輸出專輯列表,url()再次用于創(chuàng)建編輯和刪除專輯的鏈接?,F(xiàn)在打開bbb:/zftest.local/ ,可以看到頁面生成了一個專輯列表:Zend Framework 教程 添加新專輯添加新專輯的功能有兩部分工作要做:· 為用戶顯示一個填寫資料的表單;· 處理表單提交和保存到數(shù)據(jù)庫。我們使用Zend_Form 來完成這任務(wù),Zend_Form 組件允許我們創(chuàng)建表單和驗證表單輸入。我們先創(chuàng)建一個擴展Zend_Form 的新類Form_Album 來定義新的表單。因為這是一個應(yīng)用資源,F(xiàn)orm_Album 保存在application/forms 目錄的Album.php 文件。使用zf 命令行工具創(chuàng)建相關(guān)文件:zf create form Album。創(chuàng)建的Album.php 文件默認(rèn)包含了 init() 方法,創(chuàng)建表單和添加元素。編輯application/forms/Album.php文件,移除init() 方法中的注釋,并添加以下代碼:zf-tutorial/application/forms/Album.php&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論