• 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         ZendLoaderAutoloaderFactory::factory(array(
    30             'ZendLoaderStandardAutoloader' => array(
    31                 'autoregister_zf' => true
    32             )
    33         ));//自动加载
    34     }
    35 }
    36 
    37 if (!class_exists('ZendLoaderAutoloaderFactory')) {
    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 ZendMvcApplication::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 ServiceServiceManagerConfig($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 ZendServiceManagerConfig.
    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' => 'ZendMvcRouterHttpLiteral',
     6                 'options' => array(
     7                     'route'    => '/',//不同模块的route不能一样,
     8                     'defaults' => array(
     9                         'controller' => 'ApplicationControllerIndex', //记得修改模块名字
    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',//匹配路径的模式,在MvcRouter下面
    20                 'options' => array(
    21                     'route'    => '/application',
    22                     'defaults' => array(
    23                         '__NAMESPACE__' => 'ApplicationController',
    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             'ZendCacheServiceStorageCacheAbstractServiceFactory',
    49             'ZendLogLoggerAbstractServiceFactory',
    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             'ApplicationControllerIndex' => 'ApplicationControllerIndexController'
    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 ZendMvcModuleRouteListener; 4 use ZendMvcMvcEvent; 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 'ZendLoaderStandardAutoloader' => array( 24 'namespaces' => array( 25 __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 26 ), 27 ), 28 ); 29 } 30 }

  • 相关阅读:
    WPF数据爬取小工具-某宝推广位批量生成,及订单爬取 记:接单最痛一次的感悟
    .net core2.1
    Ng Alain使用
    MediatR
    RN错误随笔
    【转载】DDD分层架构的三种模式
    1.RN环境搭建,创建项目,使用夜神模拟调试
    ExtJs4 笔记(2) ExtJs对js基本语法扩展支持
    ExtJs4 笔记(1) ExtJs大比拼JQuery:Dom文档操作
    vue的父子通信
  • 原文地址:https://www.cnblogs.com/zhangjun516/p/3382106.html
Copyright © 2020-2023  润新知