Estoy creando mi primera aplicación en Laravel y estoy tratando de entender los mensajes flash de la sesión. Hasta donde yo sé, en la acción de mi controlador, puedo establecer un mensaje flash yendo
Redirect::to('users/login')->with('message', 'Thanks for registering!'); //is this actually OK?
Para el caso de redireccionar a otra ruta, o
Session::flash('message', 'This is a message!');
En mi plantilla de hoja maestra tendría entonces:
@if(Session::has('message'))
<p class="alert alert-info">{{ Session::get('message') }}</p>
@endif
Como se habrán dado cuenta que estoy usando Bootstrap 3 en mi aplicación y me gustaría hacer uso de las diferentes clases de mensajes: alert-info
, alert-warning
, alert-danger
etc.
Suponiendo que en mi controlador sé qué tipo de mensaje estoy configurando, ¿cuál es la mejor manera de pasarlo y mostrarlo en la vista? ¿Debo establecer un mensaje separado en la sesión para cada tipo (por ejemplo Session::flash('message_danger', 'This is a nasty message! Something's wrong.');
)? Entonces necesitaría una declaración if separada para cada mensaje en mi plantilla de hoja.
Cualquier consejo apreciado.
Respuestas:
Una solución sería mostrar dos variables en la sesión:
por ejemplo:
Entonces, en su opinión:
Tenga en cuenta que he puesto un valor predeterminado en
Session::get()
. de esa manera, solo necesita anularlo si la advertencia debe ser algo diferente a laalert-info
clase.(ese es un ejemplo rápido y no probado :))
fuente
Session::get()
Eso será muy útil.En tu opinión:
Luego, configure un mensaje flash en el controlador:
fuente
Mi manera es siempre Redirigir :: back () o Redirigir :: a ():
Tengo una función de ayuda para que funcione para mí, generalmente esto es en un servicio separado:
Y en mi vista o diseño, simplemente lo hago
fuente
$type = $type == 'error' : 'danger';
Puedes hacer varios mensajes y con diferentes tipos. Siga estos pasos a continuación:
app/Components/FlashMessages.php
"app/Http/Controllers/Controller.php
".Esto hará que el
FlashMessages
rasgo esté disponible para todos los controladores que amplíen esta clase.views/partials/messages.blade.php
"boot()
" método de "app/Providers/AppServiceProvider.php
":Esto hará que la
$messages
variable esté disponible para laviews/partials/message.blade.php
plantilla " " siempre que se la llame.views/partials/messages.blade.php
"Solo necesita incluir la plantilla de mensajes donde quiera que se muestren los mensajes en su página.
Espero que te ayude.
fuente
Simplemente regrese con la 'bandera' que desea ser tratado sin usar ninguna función de usuario adicional. El controlador:
Observe que utilicé la bandera 'Éxito'.
La vista:
¡Sí, realmente funciona!
fuente
Otra solución sería crear una clase de ayuda Cómo crear clases de ayuda aquí
Entonces puedes hacer esto.
o
y en tu vista
fuente
No soy un gran admirador de las soluciones proporcionadas (es decir: múltiples variables, clases auxiliares, recorriendo 'posibles variables existentes'). A continuación se muestra una solución que, en cambio, usa una matriz en lugar de dos variables separadas. También es fácilmente ampliable para manejar múltiples errores si lo desea, pero por simplicidad, lo he mantenido en un mensaje flash:
Redirigir con matriz de mensajes flash :
Salida basada en el contenido de la matriz:
No relacionado, ya que puede tener su propio método / complemento de notificación, pero solo para mayor claridad, bootstrapNotify es solo para iniciar bootstrap-notificar desde http://bootstrap-notify.remabledesigns.com/ :
fuente
Para mi aplicación hice una función auxiliar:
diseño de mensajes,
main.layouts.message
:e importar todos los lugares para mostrar el mensaje:
fuente
Yo suelo hacer esto
en mi función store () puse una alerta de éxito una vez que se guardó correctamente.
en mi función destroy (), quería colorear la alerta en rojo para notificar que se eliminó
Tenga en cuenta que creamos dos alertas con diferentes nombres de flash.
Y en mi opinión, agregaré la condición de cuándo se llamará la alerta específica en el momento adecuado
Aquí puede encontrar diferentes estilos de mensajes flash Mensajes Flash en Laravel 5
fuente
Podrías usar Laravel Macros.
Puede crear
macros.php
enapp/helpers
e incluirlo routes.php.si desea poner sus macros en un archivo de clase, puede mirar este tutorial: http://chrishayes.ca/blog/code/laravel-4-object-oriented-form-html-macros-classes-service- proveedor
En tu controlador:
En tu vista
fuente
Creo que lo siguiente funcionaría bien con una línea de códigos menor.
Estoy usando un paquete de tostadora, pero puedes tener algo como esto en tu vista.
fuente
En controlador:
O
en Blade mostrar mensaje en Blade según su patrón deseado:
fuente
Simplemente envíe una matriz en la sesión en lugar de una cadena, como esta:
fuente
Encontré esta elegante forma de enviar mensajes instantáneos. Fue hecho por Jeffrey Way de Laracast. compruébalo ... https://github.com/laracasts/flash
fuente
Si desea utilizar Bootstrap Alert para que su vista sea más interactiva. Puedes hacer algo como esto:
En su función: -
En sus puntos de vista: -
fuente