ThinkPHP3.2.3实现路由功能的[坑]

1、前情概要:tp版本3.2.3,想要实现url 路由功能,然后配合apache的htaccess文件,实现url 美化,突然问题来了,thinkphp报错【无法加载模块】

2、去查找手册,手册中是这样记载的:

启用路由
要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件中开启路由:
// 开启路由
'URL_ROUTER_ON'   => true, 
3.2的路由功能是针对模块设置的,所以URL中的模块名不能被路由,路由定义也通常是放在模块配置文件中。 3.2.3版本开始增加全局路由定义支持,可以在项目的公共配置文件中定义路由。
然后就是配置路由规则了,在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则,例如:
'URL_ROUTE_RULES'=>array(
    'news/:year/:month/:day' => array('News/archive', 'status=1'),
    'news/:id'               => 'News/read',
    'news/read/:id'          => '/news/:1',
),
系统会按定义的顺序依次匹配路由规则,一旦匹配到的话,就会定位到路由定义中的控制器和操作方法去执行(可以传入其他的参数),并且后面的规则不会继续匹配。

其中:[3.2的路由功能是针对模块设置的,所以URL中的模块名不能被路由,路由定义也通常是放在模块配置文件中。 3.2.3版本开始增加全局路由定义支持,可以在项目的公共配置文件中定义路由]

我的目录结构是这样的:

20160825145020

要加入的路由规则:

<?php
return array(
     'URL_MODEL'         =>3,
     'URL_ROUTER_ON'     => true,
     //路由规则
     'URL_ROUTE_RULES' => array(
           '/^index$/'   =>    'Index/index',
    ),
);
?>

1)应用目录【app】,按照手册的意思,我将配置信息放在【Home】模块,【App/Home/Conf/config.php】中,访问 http://127.0.0.1:8075/index.php?s=/index.html 还是报错,【无法加载模块】!失败了!

2)继续,把配置信息放在公共配置文【App/Common/Conf/config.php】中,访问 http://127.0.0.1:8075/index.php?s=/index.html 【可以成功访问】

3)若一直放在全局配置文件,那么功能模块多了呢?比如,Home,User,Employee,Portal 等 ,是不是配置文件中,就得这样写呢?所以,我的第一想法还是放在【模块配置文件中】

'URL_ROUTE_RULES' => array(
    '/^index$/'   =>    'Home/Index/index',
),

4)继续,在网上找相关的文章,解决办法如下:

I. 将配置信息还是放到【App/Home/Conf/config.php】中,然后在App/Common/Conf/config.php公共配置文件中,加入

‘MODULE_ALLOW_LIST’ => array (‘Home’), 

<?php
return array(
    'URL_MODEL'  =>3,
    'MODULE_ALLOW_LIST'=> array ('Home'),//还可以加入其它模块
    'DEFAULT_MODULE' => 'Home',//默认模块Home
);

访问 http://127.0.0.1:8075/index.php?s=/index.html 【可以成功访问】

注:更多请查看手册:ThinkPHP模块化设计

原创文章,转载请注明: 转载自HSBLOG

本文链接地址: ThinkPHP3.2.3实现路由功能的[坑]