Zend Framework 2 使用一個模塊系統(tǒng)來組織每個模塊內主要的、明確的代碼。框架提供的運用程序模塊用于提供整個程序的引導、錯誤和路由配置。應用程序模塊通常是用于提供應用界面的控制器,比如說,應用程序的主頁,但是在本教程中我們不會使用默認的主頁,在生成模塊時,我們會將專輯列表設置成主頁面。
我們要把所有的代碼放到包含控制器、模型、表單和視圖,以及配置的 Album
模塊當中。我們也要根據需要調整應用程序模塊。
從所需要的目錄開始吧。
首先在 module
里創(chuàng)建一個名為 Album
的目錄,用下面的路徑對應保存模塊的文件:
zf2-tutorial/
/module
/Album
/config
/src
/Album
/Controller
/Form
/Model
/view
/album
/album
正如你所看到的,Album
模塊當中有不同類型文件的獨立目錄。位于 src/Album
目錄中包含 Album
名稱空間的 PHP 文件,這樣的模塊就可以設置多個命名空間,這是我們想要的。視圖目錄也有叫做 album
的子文件夾,用來保存我們的模塊視圖腳本。
為了安裝和配置模塊,Zend Framework 2 提供一個 ModuleManager
。在模塊的根目錄(module/Album
)尋找 Module.php
文件,可以找到一個叫 module/Album
的類。也就是說,給定目錄名稱,就會有對應的類模塊,有對應的命名空間。
在 Album
模塊創(chuàng)建 Module.php
文件,在 zf2-tutorial/module/Album
創(chuàng)建一個叫 Module.php
的文件,代碼如下:
namespace Album;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}
ModuleManager
將自動調用 getAutoloaderConfig()
和 getConfig()
函數。
我們的 getAutoloaderConfig()
函數返回一個數組,兼容 ZF2 的 AutoloaderFactory
。對它進行配置,添加一個類映射文件給 ClassMapAutoloader
和添加此模塊的名稱給 StandardAutoloader
。標準自動加載需要一個名稱空間和在可以找到名稱空間文件的路徑。與 PSR-0 相兼容,此類按照 PSR-0 規(guī)則直接映射到文件。
隨著我們開發(fā)繼續(xù)進行,我們不需要通過類映射加載文件,所以我們提供一個空數組給類映射自動加載。在 zf2-tutorial/module/Album
創(chuàng)建一個叫 autoload_classmap.php
的文件:
return array();
因為這是一個空數組,每當自動加載器在 Album
名稱空間中尋找一個類,它都會為我們返回到 StandardAutoloader
。
注意
如果你使用的是 Composer,你可以只創(chuàng)建一個空的 getAutoloaderConfig(){ } 并添加到 composer.json:
"autoload": { "psr-0": { "Album": "module/Album/src/" } },
如果你這樣做,那么你需要運行
php composer.phar update
去更新 composer 自動加載文件。
已經注冊好自動加載器,讓我們來快速地瀏覽 Album\Module
里面 getConfig()
方法。這個方法簡單地加載了 config/module.config.php
文件。
在 zf2-tutorial/module/Album/config
創(chuàng)建一個叫 module.config.php
的文件:
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => 'Album\Controller\AlbumController',
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
配置信息通過 ServiceManager
傳遞給相關的組件。我們需要兩個初始部分:控制器和 view_manager
??刂破魈峁┝怂杏赡K提供的控制器列表。我們需要一個控制器 AlbumController
,引用作為 Album\Controller\Album
。所有控制器的 key 必須是唯一的,所以用模塊名稱作為前綴。
在 view_manager
部分,將視圖目錄添加到 TemplatePathStack
配置中。這樣它就可以找到存儲在 view/
目錄下的 Album
模塊的視圖腳本。
我們現在需要告訴 ModuleManager
這個新模塊的的存在。這個在基本框架應用程序提供的配置 config/application.config.php
文件中完成。更新這個文件,以便他的模塊部分包含 Album
模塊。因此,文件現在看起來像這樣:
(變化需要使用注釋突顯出來:)
return array(
'modules' => array(
'Application',
'Album', // <-- Add this line
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{{,*.}global,{,*.}local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
如你所見,在應用程序模塊之后,我們已經添加 Album
模塊到模塊列表當中。
現在設置好模塊,準備把自定義代碼放到里面。
更多建議: