对于zendframework2的路由配置的说明
来源:互联网 发布:好听的韩剧ost知乎 编辑:程序博客网 时间:2024/05/18 00:22
经过一下午的摸索,从基本的zendframework2的基础骨骼下面路由经常出问题,于是搜查了一下资料,得到了一份比较详细的路由配置:
<?phpreturn array( 'controllers' => array( 'invokables' => array( 'Shop\Controller\Shop' => 'Shop\Controller\ShopController', 'Shop\Controller\Index' => 'Shop\Controller\IndexController', ), ), // The following section is new and should be added to your file 'router' => array( 'routes' => array( 'Shop' => array( 'type' => 'segment', 'options' => array( 'route' => '/shop[/:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( '__NAMESPACE__' => 'Shop\Controller', 'controller' => 'Shop\Controller\Shop', 'action' => 'Index', ), ), ), ), ), 'view_manager' => array( 'template_path_stack' => array( 'shop' => __DIR__ . '/../view', ), /* 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/shop/shop/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ),*/ ),);
首先,我们看看新建一个模块的结构和目录,
请看上图,这里有通用的结构。目录有config,src,view及两个文件,Module.php及autoload_classmap.php。
config目录通常存放module.config.php里面配置该目录模块的url路径,模板存放位置,默认错误页面等等。src用于存放控制器。
view就用于存放layout【譬如,全局通用的footer,header及模板】,error【错误页面,自定义】,shop【这个是对应模块名称的模板,假如模块名称不叫shop叫test,那么这个文件夹名称就是test了。】,注意的是,shop下面的各个文件目录每一个目录对应一个控制器名称。Module.php格式如下:
<?phpnamespace Shop;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'; }}
通常需要改变的是namespace—注意,这个namespace是跟模块名称一样的。
autoload_classmap.php平时的内容如下:
<?phpreturn array();
这个文件用于预先加载一些类库,请注意,平时没有预先加载,不过假如自定义了一些类想要调用的话那么必须预先在这里定义,然后才能调用。譬如:
在vendor下面写了一些类用来操作mongodb,现在需要调用,
其中一个类如下:
那么需要在classmap里面注册:
那么就可以加载成功。
请注意,在新建了一个模块时,同时必须在下面文件注册该模块。
下面重点说说路由设置的相关注意事项。
请留意第一个,控制器 controllers下面的invokables,这个是注册所有模块控制器的,其中前面的是alias,后面是真实命名空间。
这个跟下面的路由 router规则息息相关。
现在看看路由规则,Shop这个是当前模块的路由规则,下面说说url
/shop[/:controller[/:action]]
这个参数是包裹形式,而不是
[/:controller][/:action]
这种形式的。
defaults参数设置相应的默认控制器及默认action,还有默认NAMESPACE,默认命名空间的设定要根据invokables来设定,
例如:
这个index和index最后的访问问件是:
_NAMESPACE+ controller +action而 _NAMESPACE= 'Shop\Controller'
那么
控制器就是:Shop\Controller\Index而action是:Index
我们看看invokables里面的关系:
可以知道alias
'Shop\Controller\Index' => 'Shop\Controller\IndexController',
怎么样,看明白了没有?最后访问的控制器是
Shop\Controller\IndexController
那么为了验证一下,我们可以将namespace设置为空,然后alias改成index,看看如何:
然后访问index和shop来看看:
看到没有第二个报没有shop alias别名的错误了。
- 对于zendframework2的路由配置的说明
- 学习笔记(ZendFramework2)一个新曾Module的路由配置
- ZendFramework2学习笔记 视图文件路径,多控制器路由,同模块或同控制器的多路由配置
- ZendFramework2 与MongoDB的整合
- 对于Quartz的时间配置符号中?的终极说明
- 关于Opnet路由和仿真业务配置的说明
- nginx对于AngularJS路由的rewrite
- ionic路由对于返回的处理
- 手动创建ZendFramework2项目的方法
- 对于extern "C"的说明
- 对于相机的情况说明
- zendframework2配置Module
- 静态路由的配置
- 动态路由的配置:
- 静态路由的配置
- 静态路由的配置
- 静态路由的配置
- rotue路由的配置
- UML图概况
- 往SDE和MDB数据库加载数据的问题
- Linux文件系统分析之四(目录项)
- 高通Adreno图形处理器全解析
- Linux文件系统分析之五(常规文件的表示)
- 对于zendframework2的路由配置的说明
- Terminal终端的快捷键
- HDU 1398 母函数
- java保留两位小数
- Mysql:is not allowed to connect to this MySQL server
- 文章标题
- 操作系统进程同步互斥经典问题之读者写者问题
- C++primer学习:模板编程(2):类模板的定义
- maven的聚合和继承(三)