web-dev-qa-db-fra.com

Affichage des messages d'erreur dans Laravel après avoir été redirigé du contrôleur

Comment puis-je afficher le message de validation dans la vue redirigée dans Laravel?

Voici ma fonction dans un contrôleur

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');
    }
    }

Je sais que le code ci-dessous est mauvais, mais comment puis-je le réparer et que me manque-t-il

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

Mise à jour: Et comment puis-je afficher les messages d'erreur près des champs particuliers

27
SA__

Lorsque la validation échoue, renvoyez les erreurs de validation.

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

Vous pouvez détecter l'erreur sur votre vue en utilisant

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

[~ # ~] met à jour [~ # ~]

Pour afficher une erreur sous chaque champ, procédez comme suit.

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

Pour un meilleur style d'affichage avec css.

Vous pouvez vous référer à la documentation ici.

64
Sushant Aryal

Si vous voulez charger la vue à partir du même contrôleur, vous êtes sur:

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

Et si vous voulez afficher rapidement toutes les erreurs mais avoir un peu plus de contrôle:

 @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

Déplacez tout cela dans kernel.php si seulement la méthode ci-dessus ne fonctionne pas, souvenez-vous que vous devez déplacer toutes ces lignes dans kernel.php en plus de la solution ci-dessus.

laissez-moi d’abord afficher la façon dont il est déjà dans le fichier ..

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',
    ],
];

maintenant ce que vous devez faire est

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',
    ],
];

c'est à dire.;

enter image description here

0
Mayank

Une nouvelle directive d'erreur = Laravel Lame) 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