Laravel:以表单元素名称为键获取表单字段错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37496025/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel: Get form field error with form element name as key
提问by Arun
I am trying to learn laravel
. I know Codeigniter
. In codeigniter3
I will get the form error as an array with key as the form name by using the function
我正在努力学习laravel
。我知道Codeigniter
。在codeigniter3
我将通过使用函数将表单错误作为一个以键作为表单名称的数组
$this -> form_validation -> error_array();
it will display like
它会显示像
array(
'form_element1' => 'this field is required',
'form_element2' => 'this field is required'
)
Is there any way in laravel 5 to do the same?
Laravel 5 有什么办法可以做同样的事情吗?
Please help. Any help could be appreciated
请帮忙。任何帮助都将不胜感激
回答by Rifki
Laravel controller uses ValidatesRequests
trait which provides a validate
method. Here is example how to validate a request:
Laravel 控制器使用ValidatesRequests
提供validate
方法的trait 。以下是如何验证请求的示例:
namespace App\Http\Controllers;
class MyController extends Controller
{
public function store(Request $request)
{
$this->validate($request, [
'subject' => 'required|max:255',
'message' => 'required',
]);
// All input is valid, do your task.
}
}
If user inputs doesn't pass the rules of $this->validate()
it will be automatically redirect your user back to the form view with old input and errors. The errors is held by $errors
variable which is an instance of Illuminate\Support\MessageBag
, to display it on your view:
如果用户输入不通过规则,$this->validate()
它将自动将您的用户重定向回带有旧输入和错误的表单视图。错误由$errors
作为 实例的变量保存Illuminate\Support\MessageBag
,以在您的视图中显示它:
@if (count($errors) > 0)
<div class="error">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Or you can get error by key:
或者您可以通过按键获取错误:
@if($errors->has('subject'))
{{ $errors->first('subject');}} // Printed: Subject field is required.
@endif
To answer your question about how to display errors like in CI you can use toArray()
method of Illuminate\Support\MessageBag
:
要回答有关如何在 CI 中显示错误的问题,您可以使用以下toArray()
方法Illuminate\Support\MessageBag
:
$errors->toArray()
Manual Validation
手动验证
You may also use validator instance manually using the Validator
facade, like this:
您还可以使用Validator
外观手动使用验证器实例,如下所示:
namespace App\Http\Controllers;
use Validator;
class MyController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'subject' => 'required|max:255',
'message' => 'required',
]);
if ($validator->fails()) {
return redirect('your-form-uri')->withErrors($validator)->withInput();
}
// All input is valid, do your task.
}
}
Again you can get the errors from $errors
variable as above.
同样,您可以从$errors
上述变量中获取错误。
Form Request Validation
表单请求验证
To use this method, you can start by creating a form validation request using artisan
CLI:
要使用此方法,您可以首先使用artisan
CLI创建表单验证请求:
php artisan make:request ContactRequest
It will create you a ContactRequest
class, you can find it in app/Http/Request/
folder.
它将为您创建一个ContactRequest
类,您可以在app/Http/Request/
文件夹中找到它。
namespace App\Http\Requests;
use App\Http\Requests\Request;
class ContactRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'subject' => 'required|max:225',
'message' => 'required',
];
}
}
On your controller method variable instead of using Request $request
you may use ContactRequest $request
:
在您的控制器方法变量上,Request $request
您可以使用ContactRequest $request
:
namespace App\Http\Controllers;
use App\Http\Requests\ContactRequest;
class MyController extends Controller
{
public function store(ContactRequest $request)
{
// All input is valid, do your task.
}
}
If user input passes it will continue to execute your code on that method otherwise user will be redirected back to form view, and of course you can display the errors the same as two method above.
如果用户输入通过,它将继续在该方法上执行您的代码,否则用户将被重定向回表单视图,当然您可以显示与上述两种方法相同的错误。
回答by Laravel User
you can set a return from controller
您可以设置从控制器返回
return redirect()->back()->withErrors($request->all());
or
或者
return redirect()->back()->withErrors(Input::all());
and you can print errors in view as
并且您可以在视图中打印错误
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
回答by Nysso
This will display each error message attached to its key:
这将显示附加到其键的每个错误消息:
@foreach($errors->getMessages() as $key => $error)
{{$key}}: {{$error[0]}}
@endforeach