我们所有的代码都将放在专辑(Album)的moudle中,包括controller, models, forms,views和configuration. 我们会根据要求对应用程序的module稍做改动。
让我们从目录开始吧。
创建专辑(Album)module
在module下面创建一个专辑(Album)目录,其它module的文件按照下面所示的子目录呈列:
zf2-tutorial/
/module
/Album
/config
/src
/Album
/Controller
/Form
/Model
/view
/album
/album
就如你所看到的,在专辑(Album)module下面为不同的文件分出了很多子目录。在src/Album目录下面的PHP文件中包含的类,可以根据需要拥有很多命名空间,不过这些命名空间都包含在Album命名空间下。View目录页包含一个叫Album的子文件夹,用来放置view脚本。
为了加载和配置一个module,Zend Framework 2 有一个 ModuleManger. 它将会在moudle目录(module/Album)下寻找包含一个叫AlbumModule类的Module.php文件。换言之,这个module类的命名空间就是module的名字,即module的目录名。
在zf2-tutorial/module/Album下创建一个Module.php文件:
array(
__DIR__ . '/autoload_classmap.php',
),
'ZendLoaderStandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}
ModuleManager将会自动调用方法getAutoLoaderConfig()和getConfig()。
Autoloading files
这一节我还不太了解用法,暂时保存创建时默认的值就好,所以这段我也先跳过不翻译了。
配置(Configuration)
在注册完autoloader后,让我们来快速看下AlbumModule中的getConfig()方法,这个方法仅仅是用来加载configmodule.config.php文件的。
在zf2-tutorial/module/Album/config下创建一个叫做module.config.php的文件:
array(
'invokables' => array(
'AlbumControllerAlbum' => 'AlbumControllerAlbumController',
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
这个配置信息将会有ServiceManager传递给相应的组件。我们最初需要提供两个部分:controllers 和 view_manager. controllers部分需要列出moudle下面的所有controller。这里我们需要一个AlbumController.引用自AlbumControllerAlbum. 这个controller的名字必须是所有module下唯一的,所以我们在它前面添加了module名字作为前缀。
在view_manager部分,我们给TemplatePathStack赋值为view的目录,这将帮助它为Album module找到存放在view/目录下的视图脚本。
告知应用程序我们新的module
现在我们需要告诉ModuleManager这个新的module的存在。这一工作将由skeleton应用程序提供的config/application.config.php文件来完成。修改这个文件的modules部分来包含Album module, 修改后的文件如下所示:
(修改的部分添加了注释且高亮)
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 module添加在了Applicaiton moudle的后面。
现在我们已经创建好了一个module, 可以往里面添加我们的代码了。