经实践有两种方法,虽然都是使用validate,但一种是直接使用继承,一种是使用Facade的Validator组件。
本文目的只是展示如何取出自定义的错误信息,所以文中代码是调试的代码,修缮得自行完成。
通过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
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()结果是一样的。