Zend Framework2 会员管理项目之二:创建会员模块以及模块配置
2014年03月02日
zf2的特点之一处就是模块化,这很便于我们团队协作,项目组成员可以在单独完成自己的模块,然后整合。
创建Member模块
zf2创建模块的集中方法,请参考以下博客。
我们的根目录大概是这个样子的
将Member模块展开大概是这个样子的
修改根目录下config/application.config.php,添加Member
<?php return array( // This should be an array of module namespaces used in the application. 'modules' => array( 'Application', 'Member', //添加这行,使Member模块有效 ), // These are various options for the listeners attached to the ModuleManager 'module_listener_options' => array( 'module_paths' => array( './module', './vendor', ), 'config_glob_paths' => array( 'config/autoload/{,*.}{global,local}.php', ), ), );
修改module/Member/module.php
添加getServiceConfig()函数,此函数会调用zf2的ServiceManager,注入必要的类,关于ServiceManager请参考这篇博客
<?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/ZendSkeletonModule for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Member; use Zend\ModuleManager\Feature\AutoloaderProviderInterface; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; use Member\Model\User; use Member\Model\UserTable; class Module implements AutoloaderProviderInterface { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . str_replace('\\', '/' , __NAMESPACE__), ), ), ); } public function getConfig() { return include __DIR__ . '/config/module.config.php'; } public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); } /** * get services * * @return array */ public function getServiceConfig() { return array( 'abstract_factories' => array(), 'aliases' => array(), 'factories' => array( // DB 'UserTable' => function ($sm) { $tableGateway = $sm->get('UserTableGateway'); $table = new UserTable($tableGateway); return $table; }, 'UserTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new User()); return new TableGateway('users', $dbAdapter, null, $resultSetPrototype); }, // FORMS 'LoginForm' => function ($sm) { $form = new \Member\Form\LoginForm(); $form->setInputFilter($sm->get('LoginFilter')); return $form; }, 'RegisterForm' => function ($sm) { $form = new \Member\Form\RegisterForm(); $form->setInputFilter($sm->get('RegisterFilter')); return $form; }, 'UserCreateForm' => function ($sm) { $form = new \Member\Form\UserCreateForm(); $form->setInputFilter($sm->get('UserCreateFilter')); return $form; }, 'UserEditForm' => function ($sm) { $form = new \Member\Form\UserEditForm(); $form->setInputFilter($sm->get('UserEditFilter')); return $form; }, // FILTERS 'LoginFilter' => function ($sm) { return new \Member\Form\LoginFilter(); }, 'RegisterFilter' => function ($sm) { return new \Member\Form\RegisterFilter(); }, 'UserCreateFilter' => function ($sm) { return new \Member\Form\UserCreateFilter(); }, 'UserEditFilter' => function ($sm) { return new \Member\Form\UserEditFilter(); }, ), 'invokables' => array(), 'services' => array(), 'shared' => array(), ); } }