一、开启路由
thinkphp的路由一般默认都是开启的,如果没有开启,可以在config.php里添加如下配置:
'url_route_on' => true, //开启路由
'url_route_must' => true,//表示强制开启路由,必须定义路由才能访问。一般都是使用false,即混合模式,不用路由也可以访问
二、添加路由规则
1、首先在application\index\controller\Index.php添加一个hello的方法,如下:
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return view();
}
public function hello($name = 'ThinkPHP5')
{
return 'hello,' . $name;
}
}
2、在route/route.php或者application\route.php添加路由规则,如下:
<?php
/*--------------------------------------------
* 添加路由规则:
* 1、路由到index控制器的hello操作方法
* 2、浏览器访问:http://域名/hello/参数
* -------------------------------------------*/
//方式一(在:name外面添加[],表示路由参数name为可选):
Route::get('hello/[:name]', 'index/hello');
//方式二:
return [
'hello/[:name]' => 'index/hello',
];
3、定义路由的请求类型和后缀
return [
// 定义路由的请求类型和后缀
'hello/[:name]' => ['index/hello', ['method' => 'get', 'ext' => 'do']],
];
定义后缀后,必须添加后缀才能访问,如下:
三、添加路由别名
方式一:
动态方法:Route::alias('规则名称','模块/控制器',[路由参数]);
/*--------------------------------------------
* 添加路由别名:
* 1、别名路由到 分组/控制器名
* 2、浏览器访问:http://域名/别名
* -------------------------------------------*/
Route::alias('index','index/Index');
Route::alias('login','index/Login');
Route::alias('main','index/Main');
/*--------------------------------------------
方式二:
动态数组:return[
'__alias__'=>['规则名称','模块/控制器',[路由参数]]
];
return [
//路由别名
'__alias__' => [
'index' => 'index/Index',
'login'=> 'index/Login',
'main'=> 'index/Main',
],
];
四、添加路由分组
1、在application\index\controller\Index.php添加如下几个方法,如下:
<?php
namespace app\index\controller;
class Index
{
public function get($id)
{
return '获取id=' . $id . '的内容';
}
public function read($name)
{
return '查看name=' . $name . '的内容';
}
public function find($year, $month)
{
return '查看' . $year . '年' . $month . '月的内容';
}
}
2、在route/route.php或者application\route.php添加路由分组规则,如下:
<?php
return [
//路由分组(按顺序匹配)
'[index]' => [
':year/:month' => ['index/find', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
':id' => ['index/get', ['method' => 'get'], ['id' => '\d+']],
':name' => ['index/read', ['method' => 'get'], ['name' => '\w+']],
],
];
3、浏览器访问,效果如下图:
五、thinkphp访问路由报错“No input file specified.”的解决方法:
修改伪静态配置文件.htaccess,打开htaccess文件,在index.php之后添加?(问号),如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>