我正在尝试学习laravel
.我知道Codeigniter
.codeigniter3
,我将通过使用函数将表单错误作为数组,并以键作为表单名称
$this -> form_validation -> error_array();
它将像
array(
'form_element1' => 'this field is required',
'form_element2' => 'this field is required'
)
在 laravel 5 中有什么方法可以做同样的事情吗?
请帮忙。任何帮助将不胜感激
Laravel控制器使用ValidatesRequests
特征,它提供了一种validate
方法。下面是如何验证请求的示例:
namespace AppHttpControllers;
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.
}
}
如果用户输入未通过$this->validate()
规则,它将自动将用户重定向回包含旧输入和错误的表单视图。错误由$errors
变量持有,该变量是IlluminateSupportMessageBag
的实例,以将其显示在您的视图上:
@if (count($errors) > 0)
<div class="error">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或者您可以通过键获得错误:
@if($errors->has('subject'))
{{ $errors->first('subject');}} // Printed: Subject field is required.
@endif
要回答有关如何像在 CI 中一样显示错误的问题,您可以使用toArray()
IlluminateSupportMessageBag
方法:
$errors->toArray()
手动验证
您也可以使用Validator
外观手动使用验证器实例,如下所示:
namespace AppHttpControllers;
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.
}
}
同样,您可以从$errors
变量中获取错误,如上所述。
表单请求验证
要使用此方法,您可以从使用 CLI 创建表单验证请求artisan
开始:
php artisan make:request ContactRequest
它将为您创建一个ContactRequest
类,您可以在app/Http/Request/
文件夹中找到它。
namespace AppHttpRequests;
use AppHttpRequestsRequest;
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',
];
}
}
在控制器方法变量上,您可以使用ContactRequest $request
而不是使用Request $request
:
namespace AppHttpControllers;
use AppHttpRequestsContactRequest;
class MyController extends Controller
{
public function store(ContactRequest $request)
{
// All input is valid, do your task.
}
}
如果用户输入通过,它将继续在该方法上执行您的代码,否则用户将被重定向回表单视图,当然您可以像上面的两种方法一样显示错误。
您可以设置从控制器返回
return redirect()->back()->withErrors($request->all());
或
return redirect()->back()->withErrors(Input::all());
您可以将错误打印在视图中为
@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
这将显示附加到其密钥的每个错误消息:
@foreach($errors->getMessages() as $key => $error)
{{$key}}: {{$error[0]}}
@endforeach