拉拉维尔:获取表单字段错误,表单元素名称作为键



我正在尝试学习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

最新更新