zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

路由 参数 ID 限制 传递 laravel where
2023-09-27 14:27:35 时间

 上篇文章讲到路由参数

 如何限制这个参数呢

比如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', '.*');