zendframework 2

我想我的生活需要新的挑战

zf2整个框架里面都应用了namespace,并且他的每个模块,我们都可以根据自己的需要去命名路径,对我来说,zf2的模块化更加的清晰,对于外包来说,或许很方便.

创建他,我就不说过程了,我按照自己的理解说说运行的步骤吧

View文件夹里面存放的是视图,

module:里面存放的是我们的模块,每一个模块都可以单独一个文件夹,当我们d调用模块的时候,会先找到moudel.php,--->config/module.config.php去配置相应的信息

 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 }
init_autoload.php
 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
 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 );
application.config.php
每个模块的配置文件/config/module.config.php
 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.config.php
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 }

posted @ 2013-10-22 11:26  尹少爷  阅读(1921)  评论(0编辑  收藏  举报