2016-01-19 3 views
2

Я пытаюсь получить ошибки проверки, чтобы появиться в Laravel.Laravel 5.2 -> Валидация Ошибки не отображаются

У меня есть UserController настроить как так:

<?php 

namespace App\Http\Controllers; 

use App\User; 
use App\Http\Controllers\Controller; 
//Use Request; 
Use Flash; 
Use Illuminate\Http\Request; 

class UserController extends Controller 
{ 
    /** 
    * Show the profile for the given user. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function showProfile($id) 
    { 
     return view('user.profile', ['user' => User::findOrFail($id)]); 
    } 

    public function store(Request $request) { 
     $this->validate($request, [ 
      'email' => 'required|unique:users|email|max:255', 
     ]); 

     if($this) { 

     $input = Request::all(); 

     User::create($input); 

     return redirect('/'); 

     } 
     else { 

      return redirect('/')->withErrors($validator); 
     } 
    } 
} 

На мой взгляд (layout.blade.php), я включил:

@if (count($errors) > 0) 
@foreach ($errors->all() as $error) 
    {{!! $errors !!}} 
@endforeach 
@endif 

Для учета маршрута, у меня есть :

Route::group(['middleware' => ['web']], function() { 
    Route::get('/', function(){ 
     return view('home'); 
    }); 
}); 

К сожалению, когда я вхожу «плохие» данные, которые не должны быть проверены, я не вижу какой-либо ошибки (но не хранится в db, так что есть).

Другое примечание: при создании шаблона клинка я вижу дополнительную скобку «}», и я не уверен, почему это так.

Спасибо за любую помощь.

ответ

5

Есть пара вещей, которые неправильно или что можно улучшить здесь. Метод store на UserController имеет множество странных проблем. $this всегда будет истинным, потому что объекты истинны в php. Кроме того, вы переходите в $validator в withErrors, что не имеет смысла, потому что нет переменной validator.

public function store(Request $request) { 
    $this->validate($request, [ 
     'email' => 'required|unique:users|email|max:255', 
    ]); 

    User::create(Request::all()); 
    return redirect('/'); 
} 

Метод validate выбросит Illuminate\Foundation\Validation\ValidationException, если есть ошибка проверки. Это исключение должно быть перечислено в переменном в $dontReport экземпляра в App\Exceptions\Handler, как показано ниже:

protected $dontReport = [ 
    AuthorizationException::class, 
    HttpException::class, 
    ModelNotFoundException::class, 
    ValidationException::class, 
]; 

Если вы изменили эти значения, удалены или модифицировало ValidatesRequest черты вы можете сломанную эту функциональность.

Ваша ошибка код сообщения не исправить либо:

@foreach ($errors->all() as $error) 
    {!! $errors->first() !!} 
@endforeach 

Есть 3 изменений здесь. Сначала я удалил проверку размера внешних ошибок, это действительно ничего не значит. Затем я исправил вашу дополнительную ошибку }, синтаксис для неэкранирующих данных - {!! $errors->first() !!}. Наконец, я вызвал ->first(), это возвращает первую ошибку, связанную с этим конкретным полем.

Я думаю, что важно отметить, что исключение проверки приведет к перенаправлению на предыдущую страницу.Логику определения предыдущей страницы можно найти в Illuminate\Routing\UrlGenerator::previous().

-1

Блок ошибки должны быть:

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
     @foreach ($errors->all() as $error) 
      <li>{{ $error }}</li> 
     @endforeach 
     </ul> 
    </div> 
@endif 

Предполагая, что вы используете Bootstrap для оповещений.

У вас также нет $validator. Вам нужно сделать что-то вроде этого:

$validator = Validator::make($request->all(), [ 
    'email' => 'required|unique:users|email|max:255', 
]); 

Вместо $this->validate().

Это должно быть сделано.

+1

Контроллеры имеют метод проверки подлинности, который генерирует исключение, вам не нужно менять его самостоятельно. – lagbox

+0

это не работает для меня – matinict

11

В версии larvel 5.2.41 веб-сайт промежуточного слоя выбрасывается.

Средство добавления маршрутов внутри Route::group(['middleware' => ['web']], function() { сделает валидацию неработоспособной.

+1

OMG! Я потратил почти час, пытаясь понять это, пока не напишу ваше сообщение. Это абсолютно верно! Я следую учебному пособию, которому несколько месяцев, и они все еще используют «промежуточное пространство», которое мне показалось забавным, потому что, когда я создал свой проект Laravel, такого не было в файле route.php. Я просто удалил его и вернул так, как он есть, и теперь я могу прочитать свои ошибки. Благодаря! –

+0

То же самое произошло для меня. Провел 2 часа, выяснив себя :) –

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