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测试一下