我們將構(gòu)建一個(gè)非常簡(jiǎn)單的清單系統(tǒng)來(lái)展示我們的 album 集合。主頁(yè)列舉了我們的集合以及允許添加,修改和刪除專輯。因此需要如下頁(yè)面:
頁(yè)面 | 描述 |
---|---|
主頁(yè) | 顯示專輯的列表,并提供鏈接來(lái)編輯和刪除專輯,也可以添加新專輯。 |
添加新專輯 | 這個(gè)頁(yè)面提供表單來(lái)添加新專輯。 |
編輯專輯 | 這個(gè)頁(yè)面提供表單來(lái)編輯專輯。 |
刪除專輯 | 這個(gè)頁(yè)面將會(huì)確認(rèn)我們是否要?jiǎng)h除專輯,然后刪除。 |
在構(gòu)建文件之前,最重要的是要理解框架組織頁(yè)面的方式。程序的每個(gè)頁(yè)面被稱為一個(gè)動(dòng)作,動(dòng)作被分組劃分給控制器模塊。因此,你通常需要將相關(guān)聯(lián)的動(dòng)作劃分到同一個(gè)控制器。例如,一個(gè)新聞控制器或許有如下動(dòng)作:current
,archived
和 view
。
給專輯申請(qǐng)四個(gè)頁(yè)面,將這些頁(yè)面分組劃分給單個(gè)控制器 AlbumController
,在 Album
模塊中作為動(dòng)作。這四個(gè)動(dòng)作如下:
Page | Controller | Action |
---|---|---|
Home | AlbumController | index |
Add new album | AlbumController | add |
Edit album | AlbumController | edit |
Delete album | AlbumController | delete |
URL 指定了一個(gè)特定的動(dòng)作來(lái)使用 route,這個(gè) route 在 module.config.php
模塊定義。我們將添加一個(gè) route 到我們的專輯動(dòng)作中去。更新模塊的配置文件與新代碼會(huì)高亮顯示。
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => 'Album\Controller\AlbumController',
),
),
// The following section is new and should be added to your file
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Album',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
route 的名字是 ‘a(chǎn)lbum’,其類型是 ‘segment’。segment route 允許我們指定 URL 模式中的占位符 (route),將其映射到命名參數(shù)匹配的 route。名字為 /album[/:action][/:id]
路由,將配備所有由 /album
開(kāi)頭的 URL。下一個(gè) segment 是可選的動(dòng)作名,最后一個(gè)字段將會(huì)被映射到可選 id。方括號(hào)括起來(lái)參數(shù)的是可選的,這些約束可以讓我們明確知道在字段中字符是可預(yù)料的,所以動(dòng)作的第一個(gè)單詞被限制為字母,隨后的字符可以是數(shù)字、字母、下劃線和連字符。我們規(guī)定 id 必須是數(shù)字。
route 允許我們可以有如下的 URL 格式:
URL | Page | Action |
---|---|---|
/album | 主頁(yè) (專輯列表) | index |
/album/add | 添加新的專輯 | add |
/album/edit/2 | 編輯 id 為 2 的專輯 | edit |
/album/delete/4 | 刪除 id 為 4 的專輯 | delete |
現(xiàn)在已經(jīng)準(zhǔn)備好構(gòu)建控制器了。在 Zend Framework 2 中,控制器是一個(gè)類,也就是所謂的 {Controller name}Controller
。注意,{Controller name}
的命名必須是大寫(xiě)字母開(kāi)頭??刂破鞯亩x必須存放在模塊 Controller
文件夾下的,名字格式為 {Controller name}Controller.php
的文件中。在本例中,模塊文件夾是 module/Album/src/Album/Controller
。每一個(gè)動(dòng)作是在控制器類中一個(gè)公有的方法,其命名格式是 {action name}Action
。在本例中,{action name}
應(yīng)該以小寫(xiě)字母開(kāi)頭。
注意
這個(gè)是習(xí)慣用法。 Zend Framework 2 并不提供其他限制性控制器,用戶必須實(shí)現(xiàn)
Zend\Stdlib\Dispatchable
這個(gè)接口類。這個(gè)框架提供了兩個(gè)抽象類:Zend\Mvc\Controller\AbstractActionController
和Zend\Mvc\Controller\AbstractRestfulController
。我們可以使用標(biāo)準(zhǔn)的AbstractActionController
類,如果你打算編寫(xiě)一個(gè) RESTful 的 Web 服務(wù)器,AbstractRestfulController
或許更有用。
讓我們繼續(xù)在 zf2-tutorials/module/Album/src/Album/Controller
路徑下的 AlbumController.php
的文件中構(gòu)建控制器類:
namespace Album\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AlbumController extends AbstractActionController
{
public function indexAction()
{
}
public function addAction()
{
}
public function editAction()
{
}
public function deleteAction()
{
}
}
注意
確保
Album
模塊已經(jīng)通過(guò)config/application.config.php
注冊(cè)。你也可以為Album
模塊提供一個(gè) Module Class,以便在 MVC 中使用。
注意
我們已經(jīng)在
module/Album/config/module.config.php
中的 ‘controller’ 部分注冊(cè)了信息。
現(xiàn)在已經(jīng)構(gòu)建了四個(gè)動(dòng)作,建立視圖就可以運(yùn)行了。每一個(gè)動(dòng)作的 URLs 如下:
URL | Method called |
---|---|
http://zf2-tutorial.localhost/album | Album\Controller\AlbumController::indexAction |
http://zf2-tutorial.localhost/album/add | Album\Controller\AlbumController::addAction |
http://zf2-tutorial.localhost/album/edit | Album\Controller\AlbumController::editAction |
http://zf2-tutorial.localhost/album/delete | Album\Controller\AlbumController::deleteAction |
現(xiàn)在我們有一個(gè)可以工作的 router,動(dòng)作已經(jīng)建立在程序每個(gè)頁(yè)面中。
是時(shí)候建立視圖和模型層了。
為了往程序中集成視圖,需要?jiǎng)?chuàng)建一些視圖腳本文件。這些文件通過(guò) DefaultViewStrategy
執(zhí)行,從控制器動(dòng)作方法返回傳遞的變量或視圖模型。這些視圖腳本存儲(chǔ)在模塊的視圖目錄中的控制器。現(xiàn)在創(chuàng)建這四個(gè)空文件:
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
現(xiàn)在從數(shù)據(jù)庫(kù)和模型中提取數(shù)據(jù),開(kāi)始填充。
更多建議: