路由到操作方法
路由地址的格式为:@模块/控制器/操作
这种方式看起来似乎和第一种是一样的,本质的区别是直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块。
例如,定义如下路由后:'blog/:id'=>'@index/blog/read',
系统会直接执行Loader::action('index/blog/read');
相当于直接调用 \app\index\controller\blog类的read方法。
路由到类的方法
路由地址的格式为(动态方法):\类的命名空间\类名@方法名或者(静态方法)
\类的命名空间\类名::方法名
这种方式更进一步,可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法,例如:'blog/:id'=>'\app\index\service\Blog@read',
执行的是 \app\index\service\Blog类的read方法。
也支持执行某个静态方法,例如:'blog/:id'=>'\app\index\service\Blog::read',
资源路由
ThinkPHP 5.0支持设置RESTFul请求的资源路由,方式如下:Route::resource('blog','index/blog');
或者在路由配置文件中使用__rest__添加资源路由定义:return [
// 定义资源路由
'__rest__'=>[
// 指向index模块的blog控制器
'blog'=>'index/blog',
],
// 定义普通路由
'hello/:id'=>'index/hello',
]
设置后会自动注册7个路由规则,如下:标识请求类型生成路由规则对应操作方法(默认)
indexGETblogindex
createGETblog/createcreate
savePOSTblogsave
readGETblog/:idread
editGETblog/:id/editedit
updatePUTblog/:idupdate
deleteDELETEblog/:iddelete
具体指向的控制器由路由地址决定,例如上面的设置,会对应index模块的blog控制器,你只需要为Blog控制器创建以上对应的操作方法就可以支持下面的URL访问:
http://serverName/blog/
http://serverName/blog/128
http://serverName/blog/28/edit