Laravel学习笔记(6)表单验证

  1. 在提交的表单中必须要要添加@csrf,防止表单伪造

    <form method="POST" action="/profile">
        @csrf
    
        ...
    </form>
    
  2. 表单不能发出 PUT、 PATCH 及 DELETE 请求,需要加入隐藏的 _method 域来模仿这些 HTTP 动词。即:@method('PUT')

    <form action="/foo/bar" method="POST">
        @method('PUT')
    
        ...
    </form>
    

3.old函数获取一次性存放在session中的值,用在表单的value属性中。这样当我们输出错误回调页面时,原来输入的值还存在。

在表单的input中添加value={{old(‘name’)}},此变量也是闪存变量

<input type="text" class="form-control" name="name" value={{old('name')}}>
  1. 相应控制器的store方法中编写逻辑来验证表单。即使用 Illuminate\Http\Request 对象提供的 validate 方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。在典型的 HTTP 请求的情况下,会生成一个重定向响应,而对于 AJAX 请求则会发送 JSON 响应。

    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);
    }
    

    如果验证失败,Laravel 会自动生成一个对应的响应。会自动把用户重定向到之前的位置。另外,所有的验证错误信息会被自动存储到 session。如果验证通过,那我们的控制器将会继续正常运行。

    验证不过时不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errors 是 Illuminate\Support\MessageBag 的一个实例。(直接可以在返回的视图中调用$errors变量,里面含错误信息)

    $errors是一个闪存变量

    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
    

    如果希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail 规则到该属性:

    $request->validate([
        'title' => 'bail|required|unique:posts|max:255', // 添加了Bail规则
        'body' => 'required',
    ]);
    
  2. 常用规则

规则 说明
confirmed 验证的字段必须和 foo_confirmation 的字段值一致。例如,如果要验证的字段是 password,输入中必须存在匹配的 password_confirmation 字段。
size 验证的字段必须具有与给定值匹配的大小。对于字符串来说,value 对应于字符数。对于数字来说,value 对应于给定的整数值。对于数组来说, size 对应的是数组的 count 值。对文件来说,size 对应的是文件大小(单位 kb )。
max 验证中的字段必须小于或等于 value。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估
min 验证中的字段必须具有最小值。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估
unique unique:table,column,except,idColumn验证的字段在给定的数据库表中必须是唯一的。如果没有指定 column,将会使用字段本身的名称
required 验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」: 该值为 null. 该值为空字符串。 该值为空数组或空的 可数 对象。 该值为没有路径的上传文件。
email 验证的字段必须符合 e-mail 地址格式。
sometimes 只有在该字段存在时, 才对字段执行验证
nullable 如果你不希望验证程序将 null 值视为无效的,那就将「可选」的请求字段标记为 nullable,也可以理解为有值时才验证。
$request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    'publish_at' => 'nullable|date',
]);

在这个例子里,我们指定 publish_at 字段可以为 null 或者一个有效的日期格式。如果 nullable 的修饰词没有被添加到规则定义中,验证器会认为 null 是一个无效的日期格式。

扫描二维码关注公众号,回复: 9359498 查看本文章
  1. 报错的语言包(默认为英语)
    默认表单提示是英文的,我们可以安装中文语言包进行汉化。

    composer require caouecs/laravel-lang:~3.0
    

    包含大多数语言,语言包位于vendor/caouecs/larvel-lang/src 目录中。

    使用

    根据需要复制语言包到 resources/lang 目录中。

    修改 config/app.php 配置文件

    	'locale' => 'zh-CN',
    
发布了40 篇原创文章 · 获赞 0 · 访问量 787

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104170375