2016-05-30 118 views
0

我想通过使用Laravel的验证器来验证一个简单的窗体。看起来像验证工作正常,但我无法显示错误。窗体和控制器看起来像这样。Laravel 5.2显示验证错误

形式

<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', '[email protected]'); 
    Route::post('/teams', '[email protected]'); 

}); 

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

回答

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 
+0

试过了,什么都没有改变。 – Tartar

+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 
     ]; 
    } 

} 

那么你contorller代码会像这样:

public function store(TeamRequest $request) 
{ 

    $team = Team::create($request->all()); 

    return back(); 
} 

您不再需要验证请求,并重定向回错误和其他的东西,laravel会为你做它
你的代码看起来更干净整洁,不是吗?

0

经过一点研究,我发现Laravel 5.2有一个RouteServiceProvider,它包含所有路由的Web中间件组。所以我不需要手动将web中间件组添加到我的路由中。我刚从routes.php中删除它,并解决了问题。

0

如果我从我的路线中删除网络中间件组,错误显示正常。

在Laravel 5.2 web midddleware自动应用到您的航线routes.php因此无需再次申请web中间件。它在mapWebRoutes()方法RouteServiceProvider中定义。

1

为什么在使用laravel 5时使用验证看起来像laravel 4!

在laravel 5,你首先需要做的是处理你的验证

php artisan make:request RequestName 

你会发现请求类,你在

“应用程序/ HTTP /采购/ RequestName让Request类。 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