Zend框架2使用一个模块系统,和你组织内每个你的主应用程序特定代码
模块。骨架提供的应用程序模块是用于提供引导,错误和路由
配置到整个应用程序。它通常是用来提供应用水平控制器,比如说,应用程序的主页,但我们不会使用,因为我们希望在本教程中提供的默认
我们的相册列表的主页,将生活在我们自己的模块。
我们打算把所有的代码到相册模块将包含我们的控制器,模型形式和
意见。我们还需要一些配置文件。我们开始与所需的目录。
设置相册模块
从以下子目录下的所谓专辑举行的模块的文件创建一个目录:
zf2tutorial/
/modules
/Album
/configs
/src
/Album
/Controller
/Form
/Model
/views
正如你可以看到相册模块为单独的文件,我们会有不同类型的目录。
PHP文件包含专辑命名空间内的类生活,使我们可以在src/Album目录
我们的模块内有多个命名空间,我们应该访问(引用)它。
为了装载和配置模块,Zend框架2 ModuleManager。这将寻找
Module.php模块目录的根,并期望找到一类叫做Album\模块。
也就是说,在一个给定模块的类模块的名字命名空间,这是
模块的目录名称。
创建相册模块Module.php:
modules/Album/Module.php
<?php
namespaceAlbum;
useInvalidArgumentException,
Zend\Module\Manager,
Zend\Config\Config,
Zend\Loader\AutoloaderFactory;
classModule
{
publicfunction init(Manager $moduleManager)
{
$this->initAutoloader();
}
protectedfunction initAutoloader()
{
AutoloaderFactory::factory(array(
'Zend\Loader\ClassMapAutoloader'=> array(
__DIR__ .'/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader'=> array(
'namespaces'=> array(
__NAMESPACE__ => __DIR__ .'/src/'. __NAMESPACE__, ),
),
));
}
publicfunction getConfig($env =null)
{
$config =newConfig(include __DIR__ .'/configs/module.config.php');
if(null=== $env){
return $config;
}
if(!isset($config->{$env})){
thrownewInvalidArgumentException(sprintf(
'Unknown environment "%s" provided to "%s\\%s"',
$env,
__NAMESPACE__,
__METHOD__
));
}
return $config->{$env};
}
}
?>
ModuleManager会调用的init(),我们按照惯例,应配置此自动装载
模块。我们创建initAutoloader()为我们做的方法。
自动加载文件
我们使用ZF2的AutoloaderFactory添加一个classmap文件的ClassmapAutoloader同时这个
模块的命名空间,已为我们创造了在index.php StandardAutoloader。标准
自动加载请求需要一个命名空间和路径在哪里可以找到该命名空间的文件。它是PSR- 0
兼容等类的直接映射到每对PSR-0 rules1文件。
正如我们在发展,我们不需要通过classmap加载文件,所以我们提供了一个空数组给
classmap自动加载类。创建这些内容autoload_classmap.php:
modules/Album/autoload_classmap.php:
<?php
return array();
?>
由于这是一个空数组,每当自动加载类通过相册命名空间来查找一个类, 它会把我们退回到
这里StandardAutoloader。
配置
经注册的自动加载机,让我们在快看在Album\Module中的getConfig()。
这个方法实例化一个Zend\ Config中加载CONFIGS/ module.config.php文件。并抛出一个
如果配置错误,没有在指定的环境。然后我们回到正确的配置对象。
相册模块创建以下配置文件:
1 https://gist.github.com/1293323modules/Album/configs/module.config.php:
<?php
$default = array(
'di'=> array('instance'=> array(
'Zend\View\PhpRenderer'=> array(
'parameters'=> array(
'resolver'=>'Zend\View\TemplatePathStack',
'options'=> array(
'script_paths'=> array(
'Album'=> __DIR__ .'/../views',
),
),
),
),
)),
);
// published environments
$production = $default;
$staging = $default;
$testing = $default;
$development = $default;
$config = compact('production','staging','testing','development');
return $config;
?>
“DI”的配置参数是用于配置2 Zend框架的依赖注入容器。在这
在这种情况下,我们配置了 Zend\View\PhpRenderer 类来使用 Zend\View
\TemplatePathStack 类去寻找视图脚本和相册模块,这些脚本将在
我们的意见目录。
其余的文件设置的生产,运输,测试和开发环境,使我们可以
根据需要覆盖默认。我们将填写在“默认”配置,因为我们经过
教程。
通报新模块的应用程序
现在,我们需要告诉ModuleManager,这个新的模块存在。这是在应用程序的
CONFIGS/ application.config.php文件,它是由骨架应用程序提供。更新此文件,以便
其模块部分包含的相册模块,以及这样的文件,现在看起来像这样:
(I’ve bolded the change required)
configs/application.config.php:
<?php
returnnewZend\Config\Config(array(
'module_paths'=> array(
realpath(__DIR__ .'/../modules'),
),
'modules'=> array(
'Album',
'Application',
),
'module_manager_options'=> array(
'enable_config_cache' =>false,
'cache_dir' => realpath(__DIR__ .'/../data/cache'), 'enable_dependency_check' =>false,
'enable_auto_installation'=>false,
'manifest_dir' => realpath(__DIR__ .'/../data'),
),
));
?>
正如您所看到,在加载应用模块之前,我们已经加载了我们的相册模块。作为一种公约,
我们希望你能够安装第三方模块到你的应用中来覆盖他默认的配置来编写应用模块的配置文件。
现在我们已经建立好了模块准备把我们自定义的代码放到里面。