Laravel 5.2显示验证错误

时间:2016-05-30 06:53:25

标签: php validation laravel laravel-5.2

我正在尝试使用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');

});

我该如何解决这个问题?任何帮助将不胜感激。

5 个答案:

答案 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}}方法中定义。