您的位置:首页 > 编程语言 > PHP开发

ThinkPHP学习-路由的使用测试用例源码

2017-03-09 00:00 260 查看
一个完整的URL例如:

http://tp.i/index.php/demo/goods/list

http://域名/index.php/模块名/控制器名/方法名,则上面的URL对应的PHP文件为:
/application/demo/controller/Goods.php 里的list()方法。

<?php
namespace app\demo\controller;

class Goods {

public function list() {
return '这是list页面';
}
}
?>

下面通过路由来缩短URL。

路由配置有两种方式,一个是调用Route类的静态方法,一个是/application/route.php里return 数组,官方文档说return数组的效率低,那就同意调用Route类的静态方法吧。

源码贴一下,一个route.php, 四个控制器,Goods.php, Blog.php, User.php, Order.php.

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use \think\Route;
//静态,将首页http://tp.i路由到/demo/controller/Goods.php里的index()方法。
Route::get('/', 'demo/Goods/index');
//静态,将http://tp.i/goods/list 路由到 /demo/controller/Goods.php里的list()方法。
//最前面都不要加 /
Route::get('goods/list', 'demo/Goods/list');
//静态+动态,将http://tp.i/goods/lang123 路由到 /demo/controller/Goods.php里的detail()方法,将id作为参数传入方法。
Route::get('goods/:var', 'demo/Goods/detail');
//静态+动态[可选]
Route::get('show/[:var]', 'demo/Goods/show');
//完全匹配,可以匹配http://tp.i/3,但不能匹配http://tp.i/3/4
Route::get('full/:var$', 'demo/Goods/full');
//额外传参
Route::get('param', 'demo/Goods/param?a=1');
//路由参数,限制URL后缀,匹配http://tp.i/suffix/3.html
//全部参数见手册
Route::get('suffix/:var', 'demo/Goods/suffix', ['ext'=>'html']);
//变量规则, var变量只能匹配数字,字母不行。
Route::get('rule/:var', 'demo/Goods/rule', [], ['var'=>'\d+']);
//重定向,http://tp.i/baidu 重定向到百度
Route::get('baidu', 'http://www.baidu.com');
//路由分组
Route::group('blog', [
':id' => ['demo/Blog/getById', ['ext'=>'html'], ['id'=>'\d+']],
':name' => ['demo/Blog/getByName', ['ext'=>'html'], ['id'=>'\w+']]
]);
//路由分组,公共属性提出来,测这个的时候将上面的分组注释掉
Route::group('blog', [
':id' => ['demo/Blog/getById', [], ['id'=>'\d+']],
':name' => ['demo/Blog/getByName', [], ['id'=>'\w+']]
], ['ext'=>'html']);
//快捷路由,一次定义,所有的方法都能访问,方法名以get,post,put,delete等开始
//通过http://tp.i/user/phone    http://tp.i/user/address Route::controller('user', 'demo/User');
//路由别名,与快捷路由的区别是直接访问方法名
//测试的时候把快捷路由注释掉,http://tp.i/user/getphone    http://tp.i/user/getaddress //可以添加黑名单
//Route::alias('user', 'demo/User', ['except'=>'getname']);
//资源路由,一次定义,固定的几个方法,(index,create,save,read,edit,update,delete)
//访问URL为 http://tp.i/order/create  http://tp.i/order  http://tp.i/order/7  http://tp.i/order/7/edit Route::resource('order', 'demo/Order');

/*
return [
'__pattern__' => [
'name' => '\w+',
],
'[hello]'     => [
':id'   => ['index/hello', ['method' => 'get'], [
7fe8
'id' => '\d+']],
':name' => ['index/hello', ['method' => 'post']],
],
];
*/

<?php
namespace app\demo\controller;

class Goods {

public function index() {
return '这是首页。';
}

public function list() {
return '这是列表页。';
}

public function detail($var) {
return '这是详情页,你传入的var是' . $var;
}

public function show($var=0) {
if ($var == 0) {
return '你没有传入参数,默认是0';
} else {
return '你输入的参数是:' . $var;
}
}

public function full($var) {
return '这是测试完全匹配的页面。';
}

public function param($a) {
return '这是测试额外传参,这里传递了一个隐形的变量a,值为:' . $a;
}

public function suffix($var) {
return '这是测试后缀名,只有输入.html结尾才能匹配成功.';
}

public function rule($var) {
return '这是测试变量规则,只能输入数字,输入字母不可以。';
}
}
?>

<?php
namespace app\demo\controller;

class Blog {

public function getById($id) {
return '这是测试分组路由,通过id访问,只能是数字';
}

public function getByName($name) {
return '这是测试分组路由,通过name访问,只能是字母';
}
}
?>

<?php
namespace app\demo\controller;

class User {

public function getPhone() {
return '这是测试快捷路由,通过http://tp.i/user/phone访问';
}

public function getAddress() {
return '这是测试快捷路由,通过http://tp.i/user/address访问';
}

public function getName() {
return '这是测试快捷路由,通过http://tp.i/user/name访问';
}
}
?>

<?php
namespace app\demo\controller;

class Order {

public function index() {
return '这是测试资源路由,这是首页';
}

public function create() {
return '这是测试资源路由,这是创建页';
}

public function read($id) {
return '这是通过id来读取页面,你输入的id是:' . $id;
}

public function edit($id) {
return '这是通过id来edit页面,你输入的id是:' . $id;
}
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ThinkPHP