ZendFramework的程序員參考指南_第1頁(yè)
ZendFramework的程序員參考指南_第2頁(yè)
ZendFramework的程序員參考指南_第3頁(yè)
ZendFramework的程序員參考指南_第4頁(yè)
ZendFramework的程序員參考指南_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Zend Framework的程序員參考指南 一,概述Zend Framework 2是一個(gè)開(kāi)源框架,用于開(kāi)發(fā)Web應(yīng)用程序和服務(wù)使用PHP 5.3以上版本。Zend Framework中使用100的面向?qū)ο蟮拇a,并利用PHP 5.3,即命名空間,延遲靜態(tài)綁定,lambda函數(shù)和關(guān)閉大部分的新功能 。 Zend Framework 2 是在被成功下載1500萬(wàn)次的Zend Framework 基礎(chǔ)上開(kāi)發(fā)出來(lái)的。Zend Framework的組件結(jié)構(gòu)是獨(dú)一無(wú)二的,每個(gè)組件的設(shè)計(jì)與一些依賴于其他組件。ZF2遵循堅(jiān)實(shí)的面向?qū)ο蟮脑O(shè)計(jì)原則。這種松散耦合的體系結(jié)構(gòu)允許開(kāi)發(fā)人員使用任何他們想要的組件。我

2、們稱之為“隨意使用”的設(shè)計(jì)。我們支持梨和作曲者作為一個(gè)整體的框架,并為每個(gè)組件的安裝和依賴跟蹤機(jī)制,進(jìn)一步增強(qiáng)了這種設(shè)計(jì)。 我們使用PHPUnit的測(cè)試我們的代碼和特拉維斯CI持續(xù)集成服務(wù)。 雖然它們可以單獨(dú)使用,Zend Framework的2個(gè)部分組成一個(gè)強(qiáng)大的和可擴(kuò)展的Web應(yīng)用程序框架標(biāo)準(zhǔn)庫(kù)中的形式相結(jié)合。此外,它提供了一個(gè)強(qiáng)大的,高性能的MVC實(shí)現(xiàn)方式,是簡(jiǎn)單易用的數(shù)據(jù)庫(kù)抽象,和表單組件實(shí)現(xiàn)HTML5的形式呈現(xiàn),驗(yàn)證和過(guò)濾,使開(kāi)發(fā)人員可以使用一個(gè)易于整合所有這些操作使用面向?qū)ο蟮慕涌?。其他組件,如Zend的身份驗(yàn)證和 Zend的權(quán)限 ACL的所有常見(jiàn)的憑據(jù)存儲(chǔ),提供用戶身份驗(yàn)證和授權(quán)

3、。還有一些人,的Zend Service命名空間,實(shí)現(xiàn)客戶端庫(kù)來(lái)簡(jiǎn)化訪問(wèn)最流行 的Web服務(wù)。無(wú)論您的應(yīng)用需求,你可能會(huì)發(fā)現(xiàn)一個(gè)Zend Framework組件,可用于一個(gè)徹底的測(cè)試基礎(chǔ),大大縮短了開(kāi)發(fā)時(shí)間。該項(xiàng)目的Zend框架的主要贊助商2'是Zend Technologies的,但許多公司都提供組件或重大功能的框架。如谷歌,微軟和Strike Iron公司與Zend合作,他們希望和Zend Framework 2開(kāi)發(fā)人員提供的網(wǎng)絡(luò)服務(wù)及其它技術(shù)提供接口。Zend框架不能沒(méi)有充滿活力的Zend Framework的2個(gè)社區(qū)的幫助下,交付和支持所有這些功能。社區(qū)成員包括貢獻(xiàn)者,使自己的

4、郵件列表, IRC頻道和其他論壇。你有什么問(wèn)題關(guān)于Zend框架2,社會(huì)總是可以解決這個(gè)問(wèn)題。二,安裝Zend框架? 下載最新的穩(wěn)定版本??商峁┑?。zip和。的tar.gz格式。勇敢,尖端Zend Framework的Git倉(cāng)庫(kù)中使用Git的客戶端的 下載。Zend Framework是開(kāi)源軟件,用于其開(kāi)發(fā)的Git倉(cāng)庫(kù)可在GitHub上公開(kāi)。請(qǐng)考慮使用Git如果你想貢獻(xiàn)的框架Zend Framework的,或者需要升級(jí)你的框架版本往往比版本出現(xiàn)。一旦你有一個(gè)可用Zend Framework的副本,您的應(yīng)用程序需要能夠訪問(wèn)框架的類的庫(kù)文件夾中找到。有幾種方法來(lái)實(shí)現(xiàn)這一點(diǎn)。未能找到一個(gè)Zend Fr

5、amework 2安裝,會(huì)出現(xiàn)以下錯(cuò)誤:沒(méi)有正確答復(fù)或連接的主機(jī)沒(méi)有反應(yīng),連接錯(cuò)誤:未捕獲的Runtime Exception的“例外”與“無(wú)法加載ZF2。運(yùn)行PHP composer.phar安裝“或定義一個(gè)ZF2_PATH環(huán)境變量“。為了解決這個(gè)問(wèn)題,你可以添加Zend Framework的庫(kù)路徑PHP 的include_path。此外,你應(yīng)該設(shè)置一個(gè)環(huán)境路徑名為“ZF2_PATH的在httpd.conf(或同等學(xué)歷)。即 目錄SetEnvZF2_PATH / var/ZF2運(yùn)行Linux操作系統(tǒng)。羅布·艾倫請(qǐng)?zhí)峁┮粋€(gè)入門教程與社會(huì),入門Zend框架2。其他的Zend Frame

6、work的社區(qū)成員正在積極努力擴(kuò)大本教程。三,Zend framework 2.0 入門本教程的目的是向大家介紹使用Zend Framework 2,通過(guò)創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的應(yīng)用程序使用模型 - 視圖 - 控制器模式。年底,你將有一個(gè)工作ZF2的應(yīng)用程序,你可以再戳的代碼周圍找到更多關(guān)于它是如何工作結(jié)合在一起的。 :本教程假定您正在運(yùn)行的是PHP 5.3.3與Apache Web服務(wù)器和MySQL,可以通過(guò)PDO擴(kuò)展。必須有mod_rewrite擴(kuò)展安裝和配置Apache安裝。此外,還必須保證Apache配置為支持的。htaccess文件。這通常是通過(guò)改變?cè)O(shè)置:AllowOverride

7、 None設(shè)置為AllowOverride FileInfo在你的httpd.conf文件。具體細(xì)節(jié),請(qǐng)與您的發(fā)行版本的文檔。您將無(wú)法瀏覽到在本教程的主頁(yè)以外的任何頁(yè)面,如果你還沒(méi)有配置的mod_rewrite和正確的。htaccess使用。 我們要建立的應(yīng)用程序是一個(gè)簡(jiǎn)單的庫(kù)存系統(tǒng) ,用來(lái)展示我們擁有的albums。主頁(yè)面用來(lái)列出我們的收藏和albums,以便于CDs的增刪改。在我們的站點(diǎn)上需要如下四個(gè)頁(yè)面:頁(yè)面描述Albums列表用來(lái)展示albums列表,并提供用于增加,修改,刪除的鏈接。添加albums此頁(yè)面提供一個(gè)用來(lái)添加albums的表單。編輯albums此頁(yè)面提供一個(gè)用來(lái)編輯修改a

8、lbums的表單。刪除albums此頁(yè)面用于我們選擇并確認(rèn)刪除albums。我們還需要我們的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。我們只需要一個(gè)有以下字段的數(shù)據(jù)庫(kù)表;字段名字段類型允許為空?注解idintegerNo主鍵, 自增artistvarchar(100)No titlevarchar(100)No 四,應(yīng)用程序框架入門為了構(gòu)建我們的應(yīng)用程序, 我們應(yīng)該從 github 上下載可用的ZendSkeletonApplication(zend應(yīng)用程序框架)。使用Composer()與Zend框架從頭開(kāi)始創(chuàng)建一個(gè)新的項(xiàng)目: php composer.phar create-project -repositor

9、y-url="" zendframework/skeleton-application path/to/install注意 另一種方法安裝ZendSkeletonApplication是使用GitHub。轉(zhuǎn)到 - ZendSkeletonApplication zfrelease-2.0.0beta5-2-gc2c7315.zip或類似的名稱 。將此文件解壓縮到該目錄下,你可以將你所有的虛擬主機(jī),并重新命名所得到的目錄ZF2教程。ZendSkeletonApplication被設(shè)置為使用作曲家(),以解決其依賴關(guān)系。在這種情況下,依賴關(guān)系是:Zend框架2本身。要安裝Zen

10、d Framework的2到我們的應(yīng)用程序,我們只需鍵入:php composer.phar self-updatephp composer.phar install從ZF2教程文件夾安裝。這需要一段時(shí)間。您應(yīng)該會(huì)看到如下的輸出:Installing dependencies from lock file- Installing zendframework/zendframework (dev-master) Cloning 18c8e223f070deb07c17543ed938b54542aa0ed8Generating autoload files注意 如果你看到這條消息:Runtime

11、Exception The process timed out.那么你的連接速度太慢導(dǎo)致下載整個(gè)安裝包失敗,和Composer鏈接超時(shí)。為了避免此現(xiàn)象,可以將以下運(yùn)行:php composer.phar install改為:COMPOSER_PROCESS_TIMEOUT=5000 php composer.phar install現(xiàn)在,我們可以進(jìn)入到虛擬主機(jī)。 虛擬主機(jī)你現(xiàn)在需要為此應(yīng)用創(chuàng)建一個(gè)apache虛擬主機(jī),并編輯你的主機(jī)文件夾以便于 可以指向 zf2-tutorial/public 位置下的index.php 。設(shè)置虛擬主機(jī)通常是在httpd.conf中或 添加到extra / h

12、ttpd-vhosts.conf中。如果您使用的httpd-vhosts.conf,請(qǐng)確保該文件包含主要的httpd.conf文件。一些Linux發(fā)行版(例如:Ubuntu的)包Apache的配置文件都存儲(chǔ)在/ etc/apache2 每個(gè)虛擬主機(jī)里面的文件夾中創(chuàng)建一個(gè)文件/ etc/apache2/sites-enabled。在這種情況下,你會(huì)在下面的虛擬主機(jī)塊到文件 / etc/apache2/sites-enabled/zf2-tutorial的。 確保NameVirtualHost定義和設(shè)置為“* 80”或類似的,然后再沿著這些線路,定義虛擬主機(jī): <VirtualHost *:

13、80> ServerName zf2-tutorial.localhost DocumentRoot /path/to/zf2-tutorial/public SetEnv APPLICATION_ENV "development" <Directory /path/to/zf2-tutorial/public> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory></VirtualHost>請(qǐng)確保您更新您的/

14、etc / hosts文件C: WINDOWS SYSTEM32 驅(qū)動(dòng)程序等主機(jī)文件,使ZF2-tutorial.localhost 映射到。該網(wǎng)站可以被訪問(wèn)使用 。 ZF2-tutorial.localhost本地的重新啟動(dòng)您的Web服務(wù)器。如果你的操作正確,那么你應(yīng)該看到這樣的事情: 為了測(cè)試.htaccess 文件是否正常運(yùn)行,進(jìn)入 http:/zf2-tutorial.localhost/1234 你會(huì)看到如下:如果在這里你看到的是一個(gè)標(biāo)準(zhǔn)的apache 404 error,那么在你將要繼續(xù)使用框架之前需要修復(fù).htaccess 規(guī)范。如果你使用的

15、是IIS URL重寫模塊,導(dǎo)入以下內(nèi)容: RewriteCondREQUEST_FILENAME!-F 的RewriteRule * $的index.php NC,L現(xiàn)在,你已經(jīng)得到了一個(gè)正常運(yùn)行的應(yīng)用框架,并可以開(kāi)始添加自己的應(yīng)用了。五,單元測(cè)試一個(gè)固態(tài)組件測(cè)試套件在持續(xù)發(fā)展的大項(xiàng)目中是必不可少的,對(duì)于某一部分人群來(lái)說(shuō)更是如此。每出現(xiàn)一個(gè)變動(dòng),都要回去手動(dòng)測(cè)試該應(yīng)用的每一個(gè)獨(dú)立組件是不現(xiàn)實(shí)的。在這里,您的單元測(cè)試將通過(guò)自動(dòng)測(cè)試應(yīng)用組件來(lái)緩解這個(gè)情況,并且當(dāng)您編寫測(cè)試的時(shí)候?qū)е乱恍┙M件工作不正常時(shí)提醒您。Zend Framework 2 API是使用PHPUnit的,這個(gè)應(yīng)用程序教程也是如此。

16、單元測(cè)試的詳細(xì)說(shuō)明超出了本文的討論范圍,所以我們將在接下來(lái)的頁(yè)面中,只提供樣品測(cè)試的組件。本教程是基于已經(jīng)安裝了PHPUnit使用者。設(shè)置測(cè)試目錄 首先在zf2-tutorialmoduleApplication 下創(chuàng)建一個(gè)叫做test的目錄,并包含如下子目錄:zf2-tutorial/ /module /Application /test /ApplicationTest /Controller測(cè)試目錄的結(jié)構(gòu)完全匹配模塊的源文件, 它可以確保你的測(cè)試組織良好,并且很容易找到。 引導(dǎo)您的測(cè)試接下來(lái) 在zf2-tutorial/module/Application/test 下,創(chuàng)建一個(gè)名為ph

17、punit.xml.dist 的文件。<?xml version="1.0" encoding="UTF-8"?><phpunit bootstrap="Bootstrap.php"> <testsuites> <testsuite name="zf2tutorial"> <directory>./ApplicationTest</directory> </testsuite> </testsuites></php

18、unit>一個(gè)名為Bootstrap.php 的文件,同樣安置在 zf-tutorial/module/Application/test下,這是由Evan Coury 編寫的一個(gè)引導(dǎo),僅用于drop in,只需要修改一個(gè)namespace 。<?phpnamespace ApplicationTest;/Change this namespace for your testuse ZendLoaderAutoloaderFactory;use ZendMvcServiceServiceManagerConfig;use ZendServiceManagerServiceManage

19、r;use ZendStdlibArrayUtils;use RuntimeException;error_reporting(E_ALL | E_STRICT);chdir(_DIR_);class Bootstrap protected static $serviceManager; protected static $config; protected static $bootstrap; public static function init() / Load the user-defined test configuration file, if it exists; otherwi

20、se, load if (is_readable(_DIR_ . '/TestConfig.php') $testConfig = include _DIR_ . '/TestConfig.php' else $testConfig = include _DIR_ . '/TestConfig.php.dist' $zf2ModulePaths = array(); if (isset($testConfig'module_listener_options''module_paths') $modulePaths

21、= $testConfig'module_listener_options''module_paths' foreach ($modulePaths as $modulePath) if ($path = static:findParentPath($modulePath) ) $zf2ModulePaths = $path; $zf2ModulePaths = implode(PATH_SEPARATOR, $zf2ModulePaths) . PATH_SEPARATOR; $zf2ModulePaths .= getenv('ZF2_MODULES

22、_TEST_PATHS') ?: (defined('ZF2_MODULES_TEST_PATHS') ? ZF2_MODULES_TEST_PATHS : ''); static:initAutoloader(); / use ModuleManager to load this module and it's dependencies $baseConfig = array( 'module_listener_options' => array( 'module_paths' => explode(

23、PATH_SEPARATOR, $zf2ModulePaths), ), ); $config = ArrayUtils:merge($baseConfig, $testConfig); $serviceManager = new ServiceManager(new ServiceManagerConfig(); $serviceManager->setService('ApplicationConfig', $config); $serviceManager->get('ModuleManager')->loadModules(); sta

24、tic:$serviceManager = $serviceManager; static:$config = $config; public static function getServiceManager() return static:$serviceManager; public static function getConfig() return static:$config; protected static function initAutoloader() $vendorPath = static:findParentPath('vendor'); if (i

25、s_readable($vendorPath . '/autoload.php') $loader = include $vendorPath . '/autoload.php' else $zf2Path = getenv('ZF2_PATH') ?: (defined('ZF2_PATH') ? ZF2_PATH : (is_dir($vendorPath . '/ZF2/library') ? $vendorPath . '/ZF2/library' : false); if (!$zf2Pa

26、th) throw new RuntimeException('Unable to load ZF2. Run php composer.phar install or define a ZF2_PATH environment variable.'); include $zf2Path . '/Zend/Loader/AutoloaderFactory.php' AutoloaderFactory:factory(array( 'ZendLoaderStandardAutoloader' => array( 'autoregist

27、er_zf' => true, 'namespaces' => array( _NAMESPACE_ => _DIR_ . '/' . _NAMESPACE_, ), ), ); protected static function findParentPath($path) $dir = _DIR_; $previousDir = '.' while (!is_dir($dir . '/' . $path) $dir = dirname($dir); if ($previousDir = $dir) re

28、turn false; $previousDir = $dir; return $dir . '/' . $path; Bootstrap:init();一個(gè)稱為TestConfig.php.dist的文件 <?phpreturn array( 'modules' => array( 'Application', ), 'module_listener_options' => array( 'config_glob_paths' => array( './././config/aut

29、oload/,*.global,local.php', ), 'module_paths' => array( 'module', 'vendor', ), ),);這個(gè)文件與config/application.config.php 文件基本一致,不一樣的是我們只定義了測(cè)試所需的modules。你的第一個(gè)控制器的測(cè)試接下來(lái),在zf-tutorial/module/Application/test/ApplicationTest/Controller 下創(chuàng)建IndexControllerTest.php,包含一下內(nèi)容:<?ph

30、pnamespace ApplicationTestController;use ApplicationTestBootstrap;use ZendMvcRouterHttpTreeRouteStack as HttpRouter;use ApplicationControllerIndexController;use ZendHttpRequest;use ZendHttpResponse;use ZendMvcMvcEvent;use ZendMvcRouterRouteMatch;use PHPUnit_Framework_TestCase;class IndexControllerTe

31、st extends PHPUnit_Framework_TestCase protected $controller; protected $request; protected $response; protected $routeMatch; protected $event; protected function setUp() $serviceManager = Bootstrap:getServiceManager(); $this->controller = new IndexController(); $this->request = new Request();

32、$this->routeMatch = new RouteMatch(array('controller' => 'index'); $this->event = new MvcEvent(); $config = $serviceManager->get('Config'); $routerConfig = isset($config'router') ? $config'router' : array(); $router = HttpRouter:factory($routerConf

33、ig); $this->event->setRouter($router); $this->event->setRouteMatch($this->routeMatch); $this->controller->setEvent($this->event); $this->controller->setServiceLocator($serviceManager); 在這里,我們擴(kuò)展一些引于Tom Oram的一篇名為ZF2控制器的單元測(cè)試的博客上的內(nèi)容。 主要關(guān)于通過(guò)setUp() 方法來(lái)將我們的項(xiàng)目初始化并且直接在控制器上設(shè)置的(事

34、件管理器)EventManager和服務(wù)定位器 (ServiceLocator) 。這一點(diǎn),對(duì)于我們現(xiàn)在來(lái)說(shuō)不是很重要,但是我們?cè)诰庉嬈渌叨说臏y(cè)試時(shí)很必要?,F(xiàn)在,添加下面的函數(shù)到類的IndexControllerTest: public function testIndexActionCanBeAccessed() $this->routeMatch->setParam('action', 'index'); $result = $this->controller->dispatch($this->request); $resp

35、onse = $this->controller->getResponse(); $this->assertEquals(200, $response->getStatusCode();此測(cè)試是為了驗(yàn)證首頁(yè)響應(yīng)HTTP狀態(tài)碼200 和控制器的返回值的。是位于ZendViewModelViewModel 下的一個(gè)實(shí)例。測(cè)試 進(jìn)入zf-tutorial/module/Application/test/ 并運(yùn)行phpunit ,如果能出現(xiàn)以下內(nèi)容,那么你的應(yīng)用程序已經(jīng)可以適用于更多的測(cè)試了。PHPUnit 3.5.15 by Sebastian Bergmann.Time:

36、0 seconds, Memory: 5.75MbOK (1 test, 2 assertions)五,模塊Zend Framework 2 使用模塊系統(tǒng),并且你需要在每一個(gè)模塊中編輯你主要的應(yīng)用程序代碼。每個(gè)模塊內(nèi)。骨架所提供的應(yīng)用模塊是用來(lái)提供自舉,錯(cuò)誤和路由配置的整個(gè)應(yīng)用程序。它通常是用來(lái)提供應(yīng)用層控制,也就是說(shuō),應(yīng)用程序的主頁(yè),但我們不打算在本教程中使用默認(rèn)的,因?yàn)槲覀兿M覀兊膶]嬃斜淼闹黜?yè),這將住在我們自己的模塊。我們到相冊(cè)模塊,該模塊將包含我們的控制器,模型,表格和視圖,以及配置,打算把我們所有的代碼。我們也將調(diào)整應(yīng)用程序模塊的要求。讓我們開(kāi)始與所需的目錄。設(shè)置相冊(cè)模塊首先,創(chuàng)建

37、一個(gè)目錄稱為相冊(cè)模塊具有以下子目錄下按住模塊的文件: zf2-tutorial/ /module /Album /config /src /Album /Controller /Form /Model /view /album /album正如你可以看到相冊(cè)模塊有不同類型的文件,我們將有獨(dú)立的目錄。PHP文件,其中包含類的的專輯命名空間內(nèi) 生活中的src /專輯目錄中,這樣我們就可以有多個(gè)命名空間,我們應(yīng)該在我們的模塊需要它。view目錄中也有所謂的專輯,我們的模塊的視圖腳本的子文件夾。為了加載和配置模塊,Zend Framework的2 ModuleManager會(huì)。這將尋找Module.p

38、hp的模塊目錄的根(模塊/專輯),并期望找到一類被稱為專輯模塊 內(nèi)。這是在給定的模塊,類模塊的名稱,這是目錄中的模塊名稱的命名空間。創(chuàng)建Module.php在相冊(cè)模塊:創(chuàng)建一個(gè)文件稱為Module.php下zf2-tutorial/module/Album:<?phpnamespace Album;class Module public function getAutoloaderConfig() return array( 'ZendLoaderClassMapAutoloader' => array( _DIR_ . '/autoload_classma

39、p.php', ), 'ZendLoaderStandardAutoloader' => array( 'namespaces' => array( _NAMESPACE_ => _DIR_ . '/src/' . _NAMESPACE_, ), ), ); public function getConfig() return include _DIR_ . '/config/module.config.php' 模塊管理器(ModuleManager )將會(huì)自動(dòng)調(diào)用getAutoloaderConfig

40、() and getConfig() 方法。自動(dòng)加載文件我們的getAutoloaderConfig()方法返回一個(gè)數(shù)組,用來(lái)兼容ZF2的AutoloaderFactory。我們配置它,以便我們將class map 文件添加到ClassmapAutoloader ,還可以將這個(gè)模塊的命名空間添加至StandardAutoloader。標(biāo)準(zhǔn)的自動(dòng)加載需要一個(gè)命名空間和可以找到該命名空間文件的路徑。這樣做是為了兼容PSR-0標(biāo)準(zhǔn),因此classes map 可以直接映射到每一條PSR-0規(guī)則對(duì)應(yīng)的文件。當(dāng)我們?cè)陧?xiàng)目開(kāi)發(fā)中,我們并不需要通過(guò)classmap來(lái)加載文件,因此我們?yōu)閏lassmap的自動(dòng)

41、加載機(jī)制提供了一個(gè)空的數(shù)組 。在zf2-tutorial/module/Album 下創(chuàng)建一個(gè)autoload_classmap.php文件:<?phpreturn array();由于這是一個(gè)空數(shù)組,當(dāng)自動(dòng)加載機(jī)制在album命名空間內(nèi)搜索一個(gè)類的時(shí)候 ,它將退回到我們StandardAutoloader。 配置注冊(cè)完autoloader之后,我們來(lái)簡(jiǎn)單了解一下在AlbumModule 下的getConfig() 方法。這種方法簡(jiǎn)單的加載了 config / module.config.php文件。在zf2-tutorial/module/Album/config 下,創(chuàng)建一個(gè)modu

42、le.config.php 文件: <?phpreturn array( 'controllers' => array( 'invokables' => array( 'AlbumControllerAlbum' => 'AlbumControllerAlbumController', ), ), 'view_manager' => array( 'template_path_stack' => array( 'album' => _DIR_

43、 . '/./view', ), ),);配置信息傳遞給相關(guān)組件的 ServiceManager的。我們需要兩個(gè)最初部分:控制器和view_manager??刂破鞑糠痔峁┝艘粋€(gè)列表中的所有控制器模塊提供。我們都需要一個(gè)的控制器,AlbumController,我們將專輯控制器相冊(cè)引用。控制器鍵必須是唯一的所有模塊,所以我們前綴它與我們的模塊名稱。內(nèi)view_manager部分,我們認(rèn)為目錄的 TemplatePathStack配置。這將允許它找到的相冊(cè)模塊中存儲(chǔ)的視圖/目錄視圖腳本。將新模塊告知給應(yīng)用程序現(xiàn)在我們需要告知模塊管理器(ModuleManager )我們已經(jīng)生成了一

44、個(gè)新的模塊。這一步驟我們需要在應(yīng)用程序框架提供給我們的config/application.config.php 內(nèi)完成。更新此文件,使該模塊部分同樣包含我們新建的Album 模塊,內(nèi)容如下:(改變部分高亮顯示)<?phpreturn array( 'modules' => array( 'Application', 'Album', / <- Add this line ), 'module_listener_options' => array( 'config_glob_paths' =

45、> array( 'config/autoload/,*.global,local.php', ), 'module_paths' => array( './module', './vendor', ), ),);正如你可以看到 ,我們已經(jīng)增加了我們的相冊(cè)模塊插入后的應(yīng)用程序模塊的模塊列表。我們現(xiàn)在已經(jīng)準(zhǔn)備把我們的自定義代碼的模塊。六, 路由和控制器接下來(lái)我們需要建立一個(gè)簡(jiǎn)易的存儲(chǔ)系統(tǒng)來(lái)展示我們的album。主頁(yè)將列出我們的album并允許允許我們添加、編輯和刪除album。因此頁(yè)面需要有以下要求: 頁(yè)面描述首頁(yè)此頁(yè)面

46、用來(lái)顯示album列表,并提供鏈接到編輯和刪除它們。同樣,一個(gè)鏈接來(lái)啟用添加新專輯將被提供。 添加新的album這個(gè)頁(yè)面將提供一個(gè)表單添加新album。 編輯 album這個(gè)頁(yè)面將提供一個(gè)表單編輯新album。 刪除 album這個(gè)頁(yè)面將提供一個(gè)表單刪除新album。 在我們建立文件之前,重要的是要了解如何設(shè)計(jì)頁(yè)面框架的組織結(jié)構(gòu)。每個(gè)頁(yè)面的應(yīng)用程序被稱為一個(gè)動(dòng)作和行為被分組到控制器模塊內(nèi)。因此,你通常會(huì)組織相關(guān)的動(dòng)作控制器;例如,一個(gè)新聞控制器可能動(dòng)作的電流,存檔和視圖。 當(dāng)我們創(chuàng)建完適用于以上四個(gè)功能的頁(yè)面后,我們將它們分組在一個(gè)包含有以上四個(gè)動(dòng)作模塊的控制器AlbumController中

47、。這四個(gè)動(dòng)作是:PageControllerAction主頁(yè)AlbumControllerindex添加新的albumAlbumControlleradd編輯 albumAlbumControlleredit刪除 albumAlbumControllerdelete映射一個(gè)URL來(lái)完成特定的動(dòng)作使用路線中定義的模塊的模塊配置。php文件。我們將添加一個(gè)路線為相冊(cè)的行動(dòng)。這是更新的模塊配置文件與新代碼高亮顯示。 <?phpreturn array( 'controllers' => array( 'invokables' => array( &#

48、39;AlbumControllerAlbum' => 'AlbumControllerAlbumController', ), ), / The following section is new and should be added to your file 'router' => array( 'routes' => array( 'album' => array( 'type' => 'segment', 'options' =>

49、array( 'route' => '/album/:action/:id', 'constraints' => array( 'action' => 'a-zA-Za-zA-Z0-9_-*', 'id' => '0-9+', ), 'defaults' => array( 'controller' => 'AlbumControllerAlbum', 'action' => &

50、#39;index', ), ), ), ), ), 'view_manager' => array( 'template_path_stack' => array( 'album' => _DIR_ . '/./view', ), ),);路線的名為“album”“segment”類型。 段路線允許我們指定URL模式中的占位符(路線),將被映射到命名參數(shù)的匹配路徑。在這種情況下,路線是“/專輯/:行動(dòng)/:id“這將匹配任何URL,始于/專輯。接下來(lái)的部分將是一個(gè)可選的動(dòng)作名稱,然后最后第二段將被映射到一

51、個(gè)可選的id。方括號(hào)表明,一段是可選的。約束部分允許我們確保角色在一段如預(yù)期,所以我們有有限的行動(dòng)從一個(gè)字母,然后后續(xù)字符字母數(shù)字,只強(qiáng)調(diào)或連字符。我們還限制了id號(hào)碼。 這個(gè)路由需要我們建立以下地址: URLPageAction/albumHome (list of albums)index/album/addAdd new albumadd/album/edit/2Edit album with an id of 2edit/album/delete/4Delete album with an id of 4delete創(chuàng)建控制器我們現(xiàn)在已經(jīng)準(zhǔn)備好建立我們的控制器。在Zend Framew

52、ork 2,控制器是一個(gè)類通常被稱為控制器 名控制器。需要注意的是 控制器 名必須以大寫字母開(kāi)始。這一類住在一個(gè)名為一下,Controller name Controller.php這樣在控制器模塊的目錄。在本例中,模塊/專輯/ src目錄/專輯/控制器。每一個(gè)行動(dòng)是在控制器類的公共方法被命名為動(dòng)作 名稱操作。行動(dòng) 在這種情況下,應(yīng)該開(kāi)始用小寫字母。 讓我們繼續(xù)創(chuàng)建我們的的控制器類AlbumController.php在zf2-tutorials/module/Album/src/Album/Controller: <?phpnamespace AlbumController;use Z

53、endMvcControllerAbstractActionController;use ZendViewModelViewModel;class AlbumController extends AbstractActionController public function indexAction() public function addAction() public function editAction() public function deleteAction() 我們現(xiàn)在已經(jīng)建立了,我們要使用的四個(gè)動(dòng)作。他們不會(huì)工作,直到我們的意見(jiàn)。每一個(gè)動(dòng)作的網(wǎng)址是: URL調(diào)用此方法http:/zf2-tutorial.localhost/albumAlbumControllerAlbumController:indexAction h

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論