2016-05-30 2 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(); 
} 

Если я удалить веб-группу промежуточного слоя из моих маршрутов, ошибки отображаются в порядке.

В настоящее время мой 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 и включает в себя группу промежуточного программного обеспечения для всех маршрутов. Поэтому мне не нужно вручную добавлять группу промежуточного программного обеспечения в сети. Я просто удалил его с routes.php и проблема решена.

0

Если я удалю группу промежуточного программного обеспечения из маршрутов, ошибки отображаются нормально.

В Laravel 5.2 web midddleware автоматически применяется к вашим маршрутам routes.php поэтому нет необходимости применять web промежуточное программное обеспечение снова. Он определен в методе mapWebRoutes()RouteServiceProvider.

1

Почему использование валидации выглядит как laravel 4, пока вы используете laravel 5 !!

в Laravel 5 вам нужно сначала сделать запрос класс, который обрабатывать ваши проверки

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

Смежные вопросы