我正在尝试使用Laravel的验证器验证一个简单的表单。看起来验证工作正常,但我无法显示错误。表单和控制器看起来像这样。
表格
<h3>Add a New Team</h3>
<form method="POST" action="/teams">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<input class="form-control" name="team_name" value="{{ old('team_name') }}" />
</div>
<div class="form-group">
<button type="submit" class="btn bg-primary">Add Team</button>
</div>
</form>
@if(count($errors))
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
控制器方法
public function store(Request $request) {
$this->validate($request, [
'team_name' => 'required|min:10'
]);
$team = new Team;
$team->team_name = $request->team_name;
$team->save();
return back();
}
如果我从路由中删除Web中间件组,则错误显示正常。
目前我的routes.php
文件看起来像这样
Route::group(['middleware' => ['web']], function () {
Route::get('/teams', 'TeamsController@create');
Route::post('/teams', 'TeamsController@store');
});
我该如何解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:1)
我建议你使用Laravel Form Request 运行
artisan make:request TeamRequest
添加一些逻辑和规则
class TeamRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true; //you can put here any other variable or condition
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// put your validation rules here
];
}
}
那么你的控制器代码就是这样:
public function store(TeamRequest $request)
{
$team = Team::create($request->all());
return back();
}
您不再需要验证请求并重定向并返回错误和其他内容,laravel将为您执行此操作 并且你的代码看起来更干净整洁,不是吗?
答案 1 :(得分:1)
为什么在使用laravel 5时使用验证看起来像laravel 4 !!
在laravel 5中,首先需要创建处理验证的Request类
php artisan make:request RequestName
您将在
中找到您所做的请求类'应用/ HTTP /请求/ RequestName.php'
在规则功能中,您可以处理验证
public function rules()
{
return [
// put your validation rules here
'team_name' => 'required|min:10'
];
}
最后在您的控制器中
use App\Http\Requests\RequestName;
public function store(RequestName $request) {
Team::create($request->all());
return Redirect::back();
}
了解更多插图here
答案 2 :(得分:0)
在控制器中写下以下代码:
// define rules
$rules = array(
'team_name' => 'required|min:10'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
// something
return Redirect::back()
->withErrors($validator) // send back all errors to the login form
->withInput();
}
else
{
// something
// save your data
$team = new Team;
$team->team_name = $request->team_name;
$team->save();
}
更改查看文件:
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
答案 3 :(得分:0)
经过一番研究后,我发现Laravel 5.2有一个RouteServiceProvider
,它包含了所有路由的Web中间件组。所以我不必手动将Web中间件组添加到我的路由中。我刚从routes.php
删除它并解决了问题。
答案 4 :(得分:0)
如果我从路由中删除Web中间件组,则错误显示正常。
在Laravel 5.2中,web
midddleware会自动应用于routes.php
中的路由,因此无需再次应用web
中间件。它在mapWebRoutes()
的{{1}}方法中定义。