Laravel where 限制路由传递的参数id等
原创
©著作权归作者所有:来自51CTO博客作者mp624183768的原创作品,请联系作者获取转载授权,否则将追究法律责任
上篇文章讲到路由参数
如何限制这个参数呢
比如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]+']);
一个id通常规则都是int【0-9】+这个正则往往能满足很多id的类型
我们不需要每个id都给他进行定义可以通过
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;
});
全局被限制了。很难受
有没有办法在局部的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', '.*');