课程内容

本 laravel视频教程之表单验证

laravel 提供了几种不同的方法来验证传入应用程序的数据。

  • 控制器方法验证
  • 表单验证器
  • 手动验证

控制器验证

$this->validate($rules,$message,$attr);

表单验证器

创建文件

php artisan make:request UserPost

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserPost extends FormRequest
{
    /**
     * 确定用户是否有权提出此请求。
     * 不需要验证登陆,所以有权
     * @return bool
     */
    public function authorize()
    {
        return 1;
    }

    /**
     * 规则
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name'=>'required|min:2',
            'pwd'=>'required|min:6'
        ];
    }
    //每条记录的信息验证不通过输出
    /*public function messages()
    {
        $message=[
            'name.min'=>'名字的字符最少:min字符',
            'pwd.required'=>'密码是必填的',
            'pwd.min'=>'密码的字符最少:min字符'
        ];
        return $message;
    }*/
    //字段名字
    public function attributes()
    {
        $message=[
            'name'=>'名字',
            'pwd'=>'密码',

        ];
        return $message;
    }
}

手动创建

引入命名空间

use Illuminate\Support\Facades\Validator;

public function post2(Request $request)
    {
        $rules=[
            'name'=>'required|min:2',
            'pwd'=>'required|min:6'
        ];
        $message=[
            'name.min'=>'名字的字符最少:min字符',
            'pwd.required'=>'密码是必填的',
            'pwd.min'=>'密码的字符最少:min字符'
        ];
        $attr=[
            'name'=>'名字',
            'pwd'=>'密码'
        ];
        $validator = Validator::make($request->all(), $rules,$message,$attr);
        //验证不通过进行处理
        if ($validator->fails()) {
            return redirect('post/create')
                ->withErrors($validator)
                ->withInput();
        }
    }

错误输出

通过 Validator 实例调用 errors 方法,会返回 Illuminate\Support\MessageBag 实例,它拥有各种方便的方法处理错误信息。自动提供给所有视图的 $errors 变量,也是 MessageBag 类的一个实例
所有输出

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

单个输出

@error('name')
    <div class="alert alert-danger">{{ $message }}</div>
@enderror

容易犯错的规则unique

例子

//创建
'account' => 'required|unique:admins,account',
//更新
'account' => 'required|unique:admins,account,' . $id,

如果你还自定义了其他数据库链接,你还有加数据库链接

//创建
'account' => 'required|unique:db2.admins,account',
//更新
'account' => 'required|unique:db2.admins,account,' . $id,

语言包

resources/lang 存放语言的文件位置
默认情况下,只有en ,我们可以通过创建cn,然后在/config/app.php文件下进行如下修改

 'locale' => env('LANG', 'en'),

语言包文件,必须返回数组键值对

<?php

return [

    'password' => '密码必须至少有六个字符并与确认相符',
    'reset' => '您的密码已重置!',
    'sent' => '我们已通过电子邮件发送您的密码重置链接!',
    'token' => '此密码重置令牌无效。',
    'user' => "我们无法找到你的邮件地址。",

];

判断当前环境使用的语言包

$locale = App::getLocale();

if (App::isLocale('en')) {
    //
}

翻译字符调用方法

可用方法,也可以Blade指令

{{ __('messages.welcome') }}

@lang('messages.welcome')

自定义表单验证字段属性

resources/lang/cn/validation.php
在该文件内找到attributes里面增加数组键值对即可

 'attributes' => [
        'captcha'=>'验证码',
        'domain'=>'域名',
    ]

表单规则字段对应规则信息

  'custom' => [
        'cn_name' => [
            'cn' => '必须是中文',
        ],

    ],

这个用法就是表单里面的$message传值。

单独json对语言

resources/lang下,创建你的语言包对应命名的json格式,比如我有语言包en,cn,那么新建文件
en.json,cn.json,如果我还继续加cn-tw ,那么久cn-tw.json,其他类推
例如我的cn.json

{
  "site":"黑白课堂",
  "Login":"登录"
}

那么使用语言翻译,可以直接使用,不需要带前缀

{{ __('site') }}
或
@lang('site')

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。