上篇文章讲到路由参数

Laravel where 限制路由传递的参数id等_ide

 如何限制这个参数呢

比如aaa如何只能传递int类型的数据

可以使用where

Route::get('task/read/{id}', 'TaskController@read')
->where('id', '[0-9]+');

这样如果再传递非匹配这个正则的数据会直接报错

匹配正则则会正常可以访问

多个参数如何匹配

class TaskController extends Controller
{

public function index()
{
return "index";
}

public function read($id, $name)
{
return 'id' . $id . 'name:' . $name;
}

}

使用数组的方式

Route::get('task/read/{id}/{name}', 'TaskController@read')
->where(['id' => '[0-9]+', 'name', '[a-z]+']);

Laravel where 限制路由传递的参数id等_ide_02

 一个id通常规则都是int【0-9】+这个正则往往能满足很多id的类型

我们不需要每个id都给他进行定义可以通过

Laravel where 限制路由传递的参数id等_p2p_03

 app->Providers 中的


RouteServiceProvider.php里面的boot方法定义自定义的针对id的做整数0-9之间不限制个数的限制


public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}

我们来测试这个路径

Route::get('index/{id}', function ($id) {
return 'Hello Laravel' . $id;
});

Laravel where 限制路由传递的参数id等_ide_04

 

Laravel where 限制路由传递的参数id等_ide_05

 全局被限制了。很难受

有没有办法在局部的id不限制


TaskController新增


public function read_by_any_id($id)
{
return 'id' . $id ;
}

 web.php新增

Route::get('task/read_by_any_id/{id}', 'TaskController@read_by_any_id')
->where('id', '.*');

 

Laravel where 限制路由传递的参数id等_php_06