上一篇:php里使用curl实现多张图片的上传(2019-08-29 22:59:45)
文章大纲

Laravel里validate数据校验如何自定义错误信息

2019-09-01 23:11:15

经实践有两种方法,虽然都是使用validate,但一种是直接使用继承,一种是使用Facade的Validator组件。


本文目的只是展示如何取出自定义的错误信息,所以文中代码是调试的代码,修缮得自行完成。


第一种:使用继承于Controller的Validate方法。

通过try catch来捕获错误信息。

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Validation\ValidationException;


class ArticleController extends Controller
{
public function addArticle(Request $request){
try{
$this->validate($request,
[
'article_name' => 'required'
],
[
'article_name.required' => '文章名称不可为空'
]
);
}catch(ValidationException $e){
echo $e->getMessage();
var_dump($e->errors());
echo $this->getErrorMsg($e->errors() );
}
}
}

如上$e->getMessage()这行并不能够返回自定义的错误信息,它返回的是Laravel框架自带的错误提示信息。

The given data was invalid.

这并不是我想要的结果。


打印的$e->errors()信息如下:

 array (size=1)
'article_name' =>
array (size=1)
0 => string '文章名称不可为空' (length=24)

由上可以看出,里面的错误提示正是我自定义的,也就是我所需要的。

由于我这里开发的是后端接口,只需要提供一条错误信息即可,所以我在父Controller里写了个公用的方法来获取上面错误信息数组里的第一条错误信息。


namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

//获取第一条错误信息
public function getErrorMsg($errors){
foreach($errors as $item){
return $item[0];
}
}
}


本文是翟码农个人博客蓝翟红尘里的php专题下的有关Laravel框架的相关文章,转载请注明出处:http://www.zhai14.com/blog/b1da65cb2c7a504764c7d424556ddf45.html


第二种:使用Facade模式的Validator组件的make方法实现。

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;

class ArticleController extends Controller
{
public function addArticle(Request $request){
$rules = array(
'article_name' => 'required',
'show_time' => 'required|numeric',
'status' => 'required|in:0,1'
);
$message = array(
"required" => ":attribute 不能为空",
"numeric" => ":attribute 必须为数字",
"in" => ":attribute 必须在 :values 之中"
);

$attributes = array(
"article_name" => '文章名称',
"show_time" => '展示时间',
'status' => '状态',
);
$data = $request->all();
$validate = Validator::make($data,$rules,$message,$attributes);
if ($validate->fails()) {
var_dump($validate->messages());
$show_warning = $validate->messages()->first();
echo $show_warning;
}
}

以上代码里的$validte->messages()打印出来结果如下:

object(Illuminate\Support\MessageBag)[179]
protected 'messages' =>
array (size=3)
'article_name' =>
array (size=1)
0 => string '文章名称 不能为空' (length=25)
'show_time' =>
array (size=1)
0 => string '展示时间 不能为空' (length=25)
'status' =>
array (size=1)
0 => string '状态 不能为空' (length=19)

可以看出messages这个键值下的内容跟第一种情况的$e->errors()结果是一样的。



上一篇:php里使用curl实现多张图片的上传(2019-08-29 22:59:45)
我要评论
评论列表