Laravel Redirect Volver con () Mensaje

158

Estoy tratando de redirigir a la página anterior con un mensaje cuando hay un error fatal.

App::fatal(function($exception)
{
    return Redirect::back()->with('msg', 'The Message');
}

En la vista tratando de acceder al msg con

Sessions::get('msg')

Pero no se hace nada, ¿estoy haciendo algo mal aquí?

Mudit Tuli
fuente
1
arregle la sesión de error tipográfico sy agregue usedonde sea necesario. Aparte de eso, debería funcionar.
Yevgeniy Afanasyev

Respuestas:

234

Tratar

return Redirect::back()->withErrors(['msg', 'The Message']);

y dentro de tu vista llama a esto

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
giannis christofakis
fuente
8
Esto funciona, qué genial. Pero, ¿por qué esto no funciona return Redirect::back()->with('msg', 'The Message'); cómo obtener el "msg" aquí?
Mudit Tuli
¿Has intentado ver si el mensaje está ahí? Session::has('msg')
giannis christofakis
Sí marcado Session::has('msg')y el 'mensaje' no está allí.
Mudit Tuli
2
@giannischristofakis Seguro que lo parece. No tengo idea de lo que estaba fumando esa fría mañana de niebla en septiembre.
StackOverflowed
77
Para 5.4 , withErrors('some error')- debe ser una cadena en lugar de una matriz.
senty
127

Laravel 5 y posterior

Controlador

 return redirect()->back()->with('success', 'your message,here');   

Espada:

@if (\Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{!! \Session::get('success') !!}</li>
        </ul>
    </div>
@endif
Ketan Akbari
fuente
77
Conversión de matriz a cadena :(
Yevgeniy Afanasyev
Comentario dejado como edición: si da error: conversión de matriz a cadena, entonces solo una pequeña solución en el controlador return redirect()->back()->with('success', 'your message here');
Michael
@ Michael ¿Qué quieres decir si? ¡Definitivamente devuelve una matriz!
Andrew Savetchuk
@ AndrewSavetchuk: no es mi comentario. Otro usuario de SO había editado la respuesta cuando debería haber dejado un comentario aquí o haber creado su propia respuesta.
Michael
@Michael deberíamos editar la respuesta de la manera correcta porque si ejecuta ese código no funcionará.
Andrew Savetchuk
62

Enfoque alternativo sería

Controlador

use Session;
       
Session::flash('message', "Special message goes here");
return Redirect::back();

Ver

@if (Session::has('message'))
   <div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
Almiar
fuente
22

En Laravel 5.4 lo siguiente funcionó para mí:

return back()->withErrors(['field_name' => ['Your custom message here.']]);
haakym
fuente
Hola. La respuesta aceptada es para su uso en laravel 4 (ver la etiqueta de interrogación), los parámetros para el withErrors()método en el que la respuesta es una matriz con dos elementos: ['msg', 'The Message']. Consulte la API para conocer los parámetros aceptables: laravel.com/api/4.2/Illuminate/Http/…
haakym
En mi respuesta, para usar en Laravel 5.4, los parámetros para el withErrors()método son una matriz con un elemento que es un key => valuepar, donde el valor es una matriz. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym
13

Tiene un error (falta de ortografía):

Sessions::get('msg')// an extra 's' on end

Debiera ser:

Session::get('msg')

Creo que ahora debería funcionar, lo hace para mí.

bumerang
fuente
8

Simplemente configure el mensaje flash y redirija hacia atrás desde la función de su controlador.

    session()->flash('msg', 'Successfully done the operation.');
    return redirect()->back();

Y luego puede obtener el mensaje en el archivo blade de vista.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}
Majbah Habib
fuente
Creo que {!! Session::get("msg", '') !!}debería ser suficiente. get()ya comprueba si la clave existe y devuelve el valor predeterminado de lo contrario.
Emile Bergeron
8

En Laravel 5.5 :

return back()->withErrors($arrayWithErrors);

En la vista usando Blade:

@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif
Sergio
fuente
2
$ errors-> has () falló pero $ errors-> any () funciona bien
robspin 05 de
6

En laravel 5.8 puede hacer lo siguiente:

return redirect()->back()->withErrors(['name' => 'The name is required']);

y en cuchilla:

@error('name')
<p>{{ $message }}</p>
@enderror
justijn
fuente
4

Dejé de escribir esto para laravel a favor del paquete Laracasts que lo maneja todo por ti. Es realmente fácil de usar y mantiene limpio su código. Incluso hay un laracast que cubre cómo usarlo. Todo lo que tienes que hacer:

Tire del paquete a través de Composer.

"require": {
  "laracasts/flash": "~1.0"
}

Incluya el proveedor de servicios en app / config / app.php.

'providers' => [
  'Laracasts\Flash\FlashServiceProvider'
];

Agregue un alias de fachada a este mismo archivo en la parte inferior:

'aliases' => [
  'Flash' => 'Laracasts\Flash\Flash'
];

Tire del HTML a la vista:

@include('flash::message') 

Hay un botón de cierre a la derecha del mensaje. Esto depende de jQuery, así que asegúrese de agregarlo antes de su rutina de arranque.

cambios opcionales:

Si no está utilizando bootstrap o desea omitir la inclusión del mensaje flash y escribir el código usted mismo:

@if (Session::has('flash_notification.message'))
  <div class="{{ Session::get('flash_notification.level') }}">
    {{ Session::get('flash_notification.message') }}
  </div>
@endif

Si desea ver el HTML extraído @include('flash::message'), puede encontrarlo en vendor/laracasts/flash/src/views/message.blade.php.

Si necesita modificar los parciales, haga lo siguiente:

php artisan view:publish laracasts/flash

Las dos vistas de paquete ahora se ubicarán en el directorio `app / views / packages / laracasts / flash / '.

Deber GRIFF
fuente
4

en controlador

Por ejemplo

return redirect('login')->with('message',$message);

en el archivo Blade El mensaje se almacenará en la sesión, no en variable.

Por ejemplo

@if(session('message'))
{{ session('message') }}
@endif
Hatim Hussein
fuente
3

Para Laravel 5.5+

Controlador:

return redirect()->back()->with('success', 'your message here');

Espada:

@if (Session::has('success'))
    <div class="alert alert-success">
        <ul>
            <li>{{ Session::get('success') }}</li>
        </ul>
    </div>
@endif
Andrew Savetchuk
fuente
2

Me enfrenté al mismo problema y esto funcionó.

Controlador

return Redirect::back()->withInput()->withErrors(array('user_name' => $message));

Ver

<div>{{{ $errors->first('user_name') }}}</div>
A. Mitani
fuente
2

Para laravel 5.6. *

Al intentar algunas de las respuestas proporcionadas en Laravel 5.6. *, Está claro que ha habido algunas mejoras que voy a publicar aquí para facilitar las cosas a aquellos que no pudieron encontrar una solución con el resto de las respuestas.

PASO 1:

Vaya a su archivo de controlador y agregue esto antes de la clase:

use Illuminate\Support\Facades\Redirect;

PASO 2: Agregue esto donde desea devolver la redirección.

 return Redirect()->back()->with(['message' => 'The Message']);

PASO 3: vaya a su archivo Blade y edite de la siguiente manera

@if (Session::has('message'))
<div class="alert alert-error>{{Session::get('message')}}</div>
 @endif

Entonces prueba y dame las gracias más tarde.

Esto debería funcionar con laravel 5.6. * Y posiblemente 5.7. *

Akintunde
fuente
1

Para Laravel 3

Solo un aviso sobre @giannis christofakis respuesta; para cualquiera que use Laravel 3 reemplazar

return Redirect::back()->withErrors(['msg', 'The Message']);

con:

return Redirect::back()->with_errors(['msg', 'The Message']);
Dev1997
fuente
1

Laravel 5.6. *

Controlador

if(true) {
   $msg = [
        'message' => 'Some Message!',
       ];

   return redirect()->route('home')->with($msg);
} else {
  $msg = [
       'error' => 'Some error!',
  ];
  return redirect()->route('welcome')->with($msg);
}

Plantilla de cuchilla

  @if (Session::has('message'))
       <div class="alert alert-success" role="alert">
           {{Session::get('message')}}
       </div>
  @elseif (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif

Enyoj

The Bumpaster
fuente
0

Recibí este mensaje cuando intenté redirigir como:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request)
            ->withInput();

Cuando la forma correcta es:

public function validateLogin(LoginRequest $request){
    //

    return redirect()->route('sesion.iniciar')
            ->withErrors($request->messages())
            ->withInput();
manix
fuente
0

Laravel 5.8

Controlador

return back()->with('error', 'Incorrect username or password.');

Espada

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
wobsoriano
fuente