Modules 章节【原文地址:http://framework.zend.com/manual/2.1/en/user-guide/modules.html】
我们所有的代码都将放在专辑(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)下寻找包含一个叫Album\Module类的Module.php文件。换言之,这个module类的命名空间就是module的名字,即module的目录名。
在zf2-tutorial/module/Album下创建一个Module.php文件:
<?phpnamespace Album;class Module{ 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()。
Autoloading files
这一节我还不太了解用法,暂时保存创建时默认的值就好,所以这段我也先跳过不翻译了。
配置(Configuration)
在注册完autoloader后,让我们来快速看下Album\Module中的getConfig()方法,这个方法仅仅是用来加载config\module.config.php文件的。
在zf2-tutorial/module/Album/config下创建一个叫做module.config.php的文件:
<?phpreturn array( 'controllers' => array( 'invokables' => array( 'Album\Controller\Album' => 'Album\Controller\AlbumController', ), ), 'view_manager' => array( 'template_path_stack' => array( 'album' => __DIR__ . '/../view', ), ),);
这个配置信息将会有ServiceManager传递给相应的组件。我们最初需要提供两个部分:controllers 和 view_manager. controllers部分需要列出moudle下面的所有controller。这里我们需要一个AlbumController.引用自Album\Controller\Album. 这个controller的名字必须是所有module下唯一的,所以我们在它前面添加了module名字作为前缀。
在view_manager部分,我们给TemplatePathStack赋值为view的目录,这将帮助它为Album module找到存放在view/目录下的视图脚本。
告知应用程序我们新的module
现在我们需要告诉ModuleManager这个新的module的存在。这一工作将由skeleton应用程序提供的config/application.config.php文件来完成。修改这个文件的modules部分来包含Album module, 修改后的文件如下所示:
(修改的部分添加了注释且高亮)
<?phpreturn 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 module添加在了Applicaiton moudle的后面。
现在我们已经创建好了一个module, 可以往里面添加我们的代码了。