如何在Laravel中定制错误消息?

7

这是我的代码:

public function store(Request $request){

    $this->validate($request, [
        'name' => 'required',
        'email' => 'required|email',
        'content' => 'required|min:10',
    ]);

    $new_array = array();
    $new_array['name'] = $request->name;
    $new_array['email'] = $request->email;
    $new_array['content'] = $request->content;
    contact::create($new_array);

    return back();
}

现在我需要为这些过滤器设置一些新的错误消息(例如:requiredemail等)

目前,required的默认错误消息如下:

必须填写姓名字段。

我该如何更改它?

5个回答

10
您可以使用以下命令创建Laravel请求以处理验证:

php artisan make:request RequestName

php artisan make:request RequestName

您会在app\Http\Request文件中找到该文件。

在文件中,您将找到rules()函数,您可以在其中提及所有规则。

 public function rules()
    {
        return [
            'name' => 'required',
        ];
    }

您可以创建message()函数来自定义消息,例如:
 public function messages()
    {
        return[
            'name.required' => 'The name field is required.'
        ];
    }

在控制器方法中添加此请求。
public function methodName(RequestName $request)
    {
       //Your code
    }

然后我该如何应用 RequestName - stack
当我提交表单时,出现以下错误:ReflectionException 类 App\Http\Controllers\SociallinkRequest 不存在。 如果我在 App\Http\Requests\SociallinkRequest.php 文件的顶部添加 "use App\Http\Requests\SociallinkRequest;",那么我会得到以下错误:HttpException 此操作未经授权。 我使用的是 LV 5.4 版本。 - somnath
在你的控制器中添加 use App\Http\Requests\SociallinkRequest - Akshay Deshmukh
1
我曾经使用过那个。通过从authorize()返回true而不是默认的false来解决了问题。一切都开始正常工作了。 - somnath

9
创建规则
public function user_registration_rules(array $data)
{
  $messages = [
    'full-name.required' => 'Please enter full name',     
    'address.required' => 'Please enter address'
  ];

  $validator = Validator::make($data, [
    'full-name' => 'required|min:5|max:70', 
    'address' => 'required'     
  ], $messages);

  return $validator;
}

在控制器中使用如下:

$validator = $this->user_registration_rules($request_data);   
if($validator->fails())
{
  return redirect()->back()->withErrors($validator)->withInput();
}

1
我应该在哪里编写user_registration_rules()函数?在request文件夹中吗? - stack

4
跟随以下步骤: 查看:
<div class="col-md-3">
    {{Form::label('Deposit Amount')}}
    {{Form::text('deposit_amount',Input::old('deposit_amount'),array('class'=>"form-control"))}}
    <span class="error">{!!$errors->first('deposit_amount')!!}</span>
    </div>

控制器

 use App\Http\Requests;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Input;
    use DB;
    use Hash;
    use Auth;
    use App\PaymentModel;
    use Redirect;
    use Response;

class TransactionController extends Controller
{
  public function payment(Request $request){

   $validator = Validator::make(Input::all(),  PaymentModel::Rules(), PaymentModel::$message);
   if ($validator->fails())
   {
      return \Redirect::back()->withErrors($validator)->withInput();
  }
  else
  {

    $deposit_amount=Input::get("deposit_amount");

    $obj = new PaymentModel();

    $obj->deposit_amount=$deposit_amount;

    if ($obj->save()) {

        Session::flash('success', 'Saved Successfully !!');

    } else {
      Session::flash('error', 'Some thing went wrong!!');
    }

    }

    return Redirect::action('TransactionController@payment');
  }
  }

模型

   public static function Rules(){
         $rules= array(
        'deposit_amount'=>'required|numeric',       
        ); 
       return $rules;
    }

     public static  $messages=array(
         'deposit_amount.required'=>'Please Enter Amount ',
        'deposit_amount.numeric'=>'Deposit Amount Must be a number ', 
        );

2

从文档中可以了解到:https://laravel.com/docs/5.3/validation#customizing-the-error-messages

您可以通过重写 messages 方法来自定义表单请求使用的错误消息。该方法应返回一个属性/规则对及其相应的错误消息的数组:

/**
 * Get the error messages for the defined validation rules.
 *
 * @return array
 */
public function messages() 
{
    return [
    'title.required' => 'A title is required',
    'body.required'  => 'A message is required',
];
}

这只是从文档中复制粘贴的内容。你应该参考Laravel文档,它们是最好的文档之一。


我是Laravel的新手,所以我不知道该如何使用你的代码。我之前在文档中看到过这个,但仍然不知道应该如何实现它。 - stack
你可能想要参加这个免费的Laracasts课程。https://laracasts.com/series/laravel-5-fundamentals - Vivek V Dwivedi
将您的代码添加到通过以下命令生成的请求类中:php artisan make:request MyRequest接下来,转到您的控制器并在store(Request $request)方法的参数中将Request替换为MyRequest或其他名称。 - Rafik Bari
好的,但是它应该放在哪里呢? - victorf

2
你可以这样修改验证器:
$validator = Validator::make($request, [
            'name' => 'required',
            'email' => 'required|email',
            'content' => 'required|min:10',
        ]);

现在,您将能够使用以下内容捕获验证错误:
if ($validator->fails()) {
    $error_message = $validator->errors()->all();
    // Write Custom Validator Error Message according to the $error_message found.
}

Laravel Validator提供了相当全面的错误信息。


请问您能否将一个错误信息指定为测试?例如,对于“必填”筛选器,该消息应为:“您必须在此输入框中填写内容”。 - stack
如果 ($validator->fails()) { 返回 "您必须在此输入框中填写一些内容"; } - Ani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接