1. 上一节课,我们已经学习了部分路由参数的功能,比如动态传递{id};
2. 那么,有时这个参数需要进行约束,我们可以使用正则来限定必须是数字;
Route ::get( 'task/read/{id} ', 'TaskController@read ')
->where( 'id ', '[0-9]+ '); //单个参数
->where([ 'id '=> '[0-9]+ ', 'name '=> '[a-z]+ ']); //多个参数
3. 如果想让约束 id 只能是 0-9 之间作用域全局范围,可以在模型绑定器里设置;
4. 模型绑定器路径为:app\Providers\RouteServiceProvider 的 boot()方法;
public function boot()
{
Route ::pattern( 'id ', '[0-9]+ ');
parent::boot();
}
5. 如果 id 已经被全局约束,在某个局部你想让它脱离约束,可以如下操作: ...->where( 'id ', '.*');
二.路由重定向
1. 可以设置访问一个路由的 URI,跳转到另一个路由的 URI,具体如下:
Route ::redirect( 'index ', 'task ');
Route ::redirect( 'index ', 'task ', 301); //状态码
2. 还有一个方法,可以直接让路由跳转返回 301 状态码而不用设置: Route ::permanentRedirect( 'index ', 'task ');
三.视图路由
1. 在使用视图路由之前,我们先要创建一个视图(MVC)中的 V 部分;
2. 使用视图路由,有三个参数:1.URI(必);2.名称(必);3.参数(选);
//参数 1:URI,localhost:8000/task
//参数 2:view, resources/views/task.blade.php
//参数 3:传参 ,{{$id}}
Route ::view( 'task ', 'task ', [ 'id '=>10]);
3. 对于视图页面的创建,在 resources/views 下创建 task.blade.php;
{{--静态页面 --}}
task{{$id}}
4. 当然,也可以使用助手函数 view()方法来实现这个功能;
//这里 view()的参数 1 是视图名称
//参数 2 传参,可选;
Route ::get( 'task ', function () {
return view( 'task ', [ 'id '=>10]);
});
5. 也可以将路由直接指向控制器的方法,通过方法实现 view()引入视图;
public function index()
{
return view( 'task ', [ 'id '=>10]);
}