我想我的生活需要新的挑战
zf2整个框架里面都应用了namespace,并且他的每个模块,我们都可以根据自己的需要去命名路径,对我来说,zf2的模块化更加的清晰,对于外包来说,或许很方便.
创建他,我就不说过程了,我按照自己的理解说说运行的步骤吧
View文件夹里面存放的是视图,
module:里面存放的是我们的模块,每一个模块都可以单独一个文件夹,当我们d调用模块的时候,会先找到moudel.php,--->config/module.config.php去配置相应的信息
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /** 2 * This autoloading setup is really more complicated than it needs to be for most 3 * applications. The added complexity is simply to reduce the time it takes for 4 * new developers to be productive with a fresh skeleton. It allows autoloading 5 * to be correctly configured, regardless of the installation method and keeps 6 * the use of composer completely optional. This setup should work fine for 7 * most users, however, feel free to configure autoloading however you'd like. 8 */ 9 10 // Composer autoloading 11 if (file_exists('./vendor/autoload.php')) { 12 $loader = include './vendor/autoload.php'; 13 } 14 15 $zf2Path = false; 16 17 if (is_dir('./vendor/Zend')) { 18 $zf2Path = './vendor/Zend'; 19 } elseif (getenv('Zend_PATH')) { // Support for Zend_PATH environment variable or git submodule 20 $zf2Path = getenv('Zend_PATH'); 21 } elseif (get_cfg_var('zend_path')) { // Support for zend_path directive value 22 $zf2Path = get_cfg_var('zend_path'); 23 } 24 if ($zf2Path) { 25 if (isset($loader)) { 26 $loader->add('Zend', $zf2Path); 27 } else { 28 include $zf2Path . '/Loader/AutoloaderFactory.php'; 29 Zend\Loader\AutoloaderFactory::factory(array( 30 'Zend\Loader\StandardAutoloader' => array( 31 'autoregister_zf' => true 32 ) 33 ));//自动加载 34 } 35 } 36 37 if (!class_exists('Zend\Loader\AutoloaderFactory')) { 38 throw new RuntimeException('Unable to load Zend. Run `php composer.phar install` or define a ZF2_PATH environment variable.'); 39 }
1 /** 2 * This makes our life easier when dealing with paths. Everything is relative 3 * to the application root now. 4 */ 5 chdir(__DIR__); 6 7 // Decline static file requests back to the PHP built-in webserver 8 if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) { 9 return false; 10 } 11 12 // Setup autoloading 13 require 'init_autoloader.php'; 14 15 // Run the application! 16 Zend\Mvc\Application::init(require 'config/application.config.php')->run();
Application.php
1 init()
2 public static function init($configuration = array()) 3 { 4 $smConfig = isset($configuration['service_manager']) ? $configuration['service_manager'] : array(); 5 6 $listeners = isset($configuration['listeners']) ? $configuration['listeners'] : array(); 7 $serviceManager = new ServiceManager(new Service\ServiceManagerConfig($smConfig)); //调用了ServiceManager 8 $serviceManager->setService('ApplicationConfig', $configuration);写入配置文件service_manager 9 $serviceManager->get('ModuleManager')->loadModules(); 10 return $serviceManager->get('Application')->bootstrap($listeners); 11 }
run() //也在这个文件夹下面,自己可以去看看源码
全局的配置文件config/application.config.php
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 return array( 2 // This should be an array of module namespaces used in the application. 3 'modules' => array( 4 'Application', 5 'Student', 6 ), //模块的名字,每次添加一个模块,就要在这添加他的名字哦 7 8 // These are various options for the listeners attached to the ModuleManager 9 'module_listener_options' => array( 10 // This should be an array of paths in which modules reside. 11 // If a string key is provided, the listener will consider that a module 12 // namespace, the value of that key the specific path to that module's 13 // Module class. 14 'module_paths' => array( 15 './module',//模块的存储路径 16 './vendor', 17 ), 18 'config_cache_enabled' => false, 19 'config_cache_key' => 'module-config-cache', 20 21 // An array of paths from which to glob configuration files after 22 // modules are loaded. These effectively override configuration 23 // provided by modules themselves. Paths may use GLOB_BRACE notation. 24 'config_glob_paths' => array( 25 'config/autoload/{,*.}{global,local}.php',//配置文件,db 26 ), 27 28 // Whether or not to enable a configuration cache. 29 // If enabled, the merged configuration will be cached and used in 30 // subsequent requests. 31 //'config_cache_enabled' => $booleanValue, 32 33 // The key used to create the configuration cache file name. 34 //'config_cache_key' => $stringKey, 35 36 // Whether or not to enable a module class map cache. 37 // If enabled, creates a module class map cache which will be used 38 // by in future requests, to reduce the autoloading process. 39 //'module_map_cache_enabled' => $booleanValue, 40 41 // The key used to create the class map cache file name. 42 //'module_map_cache_key' => $stringKey, 43 44 // The path in which to cache merged configuration. 45 //'cache_dir' => $stringPath, 46 47 // Whether or not to enable modules dependency checking. 48 // Enabled by default, prevents usage of modules that depend on other modules 49 // that weren't loaded. 50 // 'check_dependencies' => true, 51 ), 52 53 // Used to create an own service manager. May contain one or more child arrays. 54 //'service_listener_options' => array( 55 // array( 56 // 'service_manager' => $stringServiceManagerName, 57 // 'config_key' => $stringConfigKey, 58 // 'interface' => $stringOptionalInterface, 59 // 'method' => $stringRequiredMethodName, 60 // ), 61 // ) 62 63 // Initial configuration with which to seed the ServiceManager. 64 // Should be compatible with Zend\ServiceManager\Config. 65 // 'service_manager' => array(), 66 );
每个模块的配置文件/config/module.config.php
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 return array( 2 'router' => array( 3 'routes' => array( 4 'home' => array( 5 'type' => 'Zend\Mvc\Router\Http\Literal', 6 'options' => array( 7 'route' => '/',//不同模块的route不能一样, 8 'defaults' => array( 9 'controller' => 'Application\Controller\Index', //记得修改模块名字 10 'action' => 'index', 11 ), 12 ), 13 ), 14 // The following is a route to simplify getting started creating 15 // new controllers and actions without needing to create a new 16 // module. Simply drop new controllers in, and you can access them 17 // using the path /application/:controller/:action 18 'application' => array( 19 'type' => 'Literal',//匹配路径的模式,在Mvc\Router\下面 20 'options' => array( 21 'route' => '/application', 22 'defaults' => array( 23 '__NAMESPACE__' => 'Application\Controller', 24 'controller' => 'Index', 25 'action' => 'index', 26 ), 27 ), 28 'may_terminate' => true, 29 'child_routes' => array(//子路径 30 'default' => array( 31 'type' => 'Segment', 32 'options' => array( 33 'route' => '/[:controller[/:action]]', 34 'constraints' => array( 35 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 36 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 37 ), 38 'defaults' => array( 39 ), 40 ), 41 ), 42 ), 43 ), 44 ), 45 ), 46 'service_manager' => array( 47 'abstract_factories' => array( 48 'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 49 'Zend\Log\LoggerAbstractServiceFactory', 50 ), 51 'aliases' => array( 52 'translator' => 'MvcTranslator', 53 ), 54 ), 55 'translator' => array( 56 'locale' => 'en_US', 57 'translation_file_patterns' => array( 58 array( 59 'type' => 'gettext', 60 'base_dir' => __DIR__ . '/../language', 61 'pattern' => '%s.mo', 62 ), 63 ), 64 ), 65 'controllers' => array( 66 'invokables' => array( 67 'Application\Controller\Index' => 'Application\Controller\IndexController' 68 ), 69 ), 70 'view_manager' => array( 71 'display_not_found_reason' => true, 72 'display_exceptions' => true, 73 'doctype' => 'HTML5', 74 'not_found_template' => 'error/404', 75 'exception_template' => 'error/index', 76 'template_map' => array( 77 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 78 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', //记得修改模块的名字啊 79 'error/404' => __DIR__ . '/../view/error/404.phtml', 80 'error/index' => __DIR__ . '/../view/error/index.phtml', 81 ), 82 'template_path_stack' => array( 83 __DIR__ . '/../view', 84 ), 85 ), 86 87 );
Module.php
1 namespace Student; 2 3 use Zend\Mvc\ModuleRouteListener; 4 use Zend\Mvc\MvcEvent; 5 6 class Module 7 { 8 public function onBootstrap(MvcEvent $e) 9 { 10 $eventManager = $e->getApplication()->getEventManager(); 11 $moduleRouteListener = new ModuleRouteListener(); 12 $moduleRouteListener->attach($eventManager);//路径 13 } 14 15 public function getConfig() 16 { 17 return include __DIR__ . '/config/module.config.php';//调用自己的配置文件 18 } 19 20 public function getAutoloaderConfig() 21 { 22 return array( 23 'Zend\Loader\StandardAutoloader' => array( 24 'namespaces' => array( 25 __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 26 ), 27 ), 28 ); 29 } 30 }