web-dev-qa-db-ja.com

コントローラーからリダイレクトされた後のLaravelでのエラーメッセージの表示

Laravelでリダイレクトされているビューに検証メッセージを表示するにはどうすればよいですか?

これがコントローラーの機能です

public function registeruser()
{
    $firstname = Input::get('firstname');
    $lastname = Input::get('lastname');
    $data  =  Input::except(array('_token')) ;
    $rule  =  array(
                'firstname'       => 'required',
                'lastname'         => 'required',
                   ) ;
    $validator = Validator::make($data,$rule);
    if ($validator->fails())
    {
    $messages = $validator->messages();
    return Redirect::to('/')->with('message', 'Register Failed');
    }
    else
    {
    DB::insert('insert into user (firstname, lastname) values (?, ?)',
                                array($firstname, $lastname));
    return Redirect::to('/')->with('message', 'Register Success');
    }
    }

私は以下のコードが悪い試みであることを知っていますが、どうすれば修正できますか?

@if($errors->has())
    @foreach ($errors->all() as $error)
        <div>{{ $error }}</div>
    @endforeach
@endif

更新:そして、特定のフィールドの近くにエラーメッセージを表示する方法

27
SA__

検証に失敗すると、検証エラーとともに戻ります。

if($validator->fails()) {
    return Redirect::back()->withErrors($validator);
}

あなたはあなたのビューでエラーをキャッチすることができます

@if ($errors->any())
        {{ implode('', $errors->all('<div>:message</div>')) }}
@endif

UPDATE

各フィールドの下にエラーを表示するには、次のようにします。

<input type="text" name="firstname">
@if ($errors->has('firstname'))
    <div class="error">{{ $errors->first('firstname') }}</div>
@endif

CSSを使用した表示スタイルの改善。

あなたはドキュメントを参照することができます こちら

64
Sushant Aryal

使用している同じコントローラーからビューをロードする場合:

if ($validator->fails()) {
    return self::index($request)->withErrors($validator->errors());
}

すべてのエラーをすばやく表示したいが、もう少し制御したい場合:

 @if ($errors->any())
     @foreach ($errors->all() as $error)
         <div>{{$error}}</div>
     @endforeach
 @endif
11
Andrew
@if ($errors->has('category'))
    <span class="error">{{ $errors->first('category') }}</span>
@endif
5
Nicola Lamonaca

上記の方法だけではうまくいかなかった場合、kernel.phpのすべてを移動します。上記のソリューションに加えてkernel.phpのすべての行を移動する必要があることを覚えておいてください

最初に、ファイル内に既にある方法を表示させてください。

protected $middleware = [

    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

今あなたがしなければならないことは

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
     \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
];

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [

    ],

    'api' => [
        'throttle:60,1',
    ],
];

すなわち

enter image description here

0
Mayank

新しいLaravel Blade Error DirectiveがLaravel 5.8.1に追加されました

// Before
@if ($errors->has('email'))
    <span>{{ $errors->first('email') }}</span>
@endif

// After:
@error('email')
    <span>{{ $message }}</span>
@enderror
0
Vipertecpro
{!! Form::text('firstname', null !!}

@if($errors->has('firstname')) 
    {{ $errors->first('firstname') }} 
@endif
0
rahul