Laravel内置校验方法肯定是不够用的,我们可以自定义校验类满足开发中的一些个性化需求。

下面以自定义手机号的例子讲解如何在laravel中创建自定义校验类。

创建Laravel自定义校验类

使用命令创建自定义手机号码校验类

php artisan make:rule MobileRule
创建的文件位于app\Rules\MobileRule.php,当然您也可以通过手动创建的方式创建这个自定义校验类。

修改Laravel校验方法

改造我们刚才创建的校验类文件。

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class MobileRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (preg_match("/^1[34578]\d{9}$/", $value)) {
            echo true;
        } else {
            echo  false;
        }
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return '手机号格式错误';
    }
} 
这里使用正则的方式判断是否为手机号。

在控制器中使用自定义校验类

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\UserRequest;
use App\Rules\MobileRule;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class UserController extends Controller {

    public function add(Request $request) {
        $rules = array(
            'mobile'   => array(
                'required',
                new MobileRule() //使用刚才创建的自定义校验类
            ),
        );
        $message = array(
            "required"   => ":attribute 不能为空",
        );
        $attributes = array(
            "mobile"     => '手机号',
        );
        $data = $request->all();
        $validator = Validator::make($data, $rules, $message, $attributes);
        if ($validator->fails()) {
            $errors = $validator->getMessageBag()->toArray();
            $errStr = "";
            foreach ($errors as $errorList) {
                foreach($errorList as $error){
                    $errStr .= $error . "\n";
                }
            }

            //自定义返回
            return response()->json(array(
                'msg' => $errStr,
                'code' => 500
            ));
        }
    }
}

使用postman测试一下

Laravel 自定义校验类方法