Estou fazendo meu primeiro aplicativo no Laravel e estou tentando entender as mensagens flash da sessão. Tanto quanto estou ciente da ação do meu controlador, posso definir uma mensagem flash indo
Redirect::to('users/login')->with('message', 'Thanks for registering!'); //is this actually OK?
Para o caso de redirecionamento para outra rota, ou
Session::flash('message', 'This is a message!');
Em meu modelo de lâmina mestre, eu teria:
@if(Session::has('message'))
<p class="alert alert-info">{{ Session::get('message') }}</p>
@endif
Como você deve ter notado que eu estou usando Bootstrap 3 em meu aplicativo e gostaria de fazer uso das diferentes classes de mensagem: alert-info
, alert-warning
, alert-danger
etc.
Supondo que no meu controlador eu saiba que tipo de mensagem estou definindo, qual é a melhor maneira de transmiti-la e exibi-la na visualização? Devo definir uma mensagem separada na sessão para cada tipo (por exemplo Session::flash('message_danger', 'This is a nasty message! Something's wrong.');
)? Então, eu precisaria de uma instrução if separada para cada mensagem em meu modelo blade.
Qualquer conselho apreciado.
Respostas:
Uma solução seria inserir duas variáveis na sessão:
por exemplo:
Então, em sua opinião:
Observe que coloquei um valor padrão em
Session::get()
. dessa forma, você só precisa substituí-lo se o aviso for algo diferente daalert-info
classe.(este é um exemplo rápido e não testado :))
fonte
Session::get()
Isso será muito útil.Em sua opinião:
Em seguida, defina uma mensagem flash no controlador:
fonte
Minha maneira é sempre Redirect :: back () ou Redirect :: to ():
Tenho uma função auxiliar para fazer funcionar para mim, geralmente em um serviço separado:
E na minha visão ou layout, eu apenas faço
fonte
$type = $type == 'error' : 'danger';
Você pode fazer várias mensagens e com diferentes tipos. Siga estas etapas abaixo:
app/Components/FlashMessages.php
"app/Http/Controllers/Controller.php
".Isso tornará a
FlashMessages
característica disponível para todos os controladores que estendem esta classe.views/partials/messages.blade.php
"boot()
" método de "app/Providers/AppServiceProvider.php
":Isso tornará a
$messages
variável disponível para oviews/partials/message.blade.php
modelo " " sempre que for chamada.views/partials/messages.blade.php
"Você só precisa incluir o modelo de mensagens onde quiser exibir as mensagens em sua página.
Espero que ajude você.
fonte
Simplesmente retorne com o 'sinalizador' que deseja que seja tratado, sem usar nenhuma função de usuário adicional. O controlador:
Observe que usei o sinalizador 'Sucesso'.
A vista:
Sim, realmente funciona!
fonte
Outra solução seria criar uma classe auxiliar. Como criar classes auxiliares aqui
Então você pode fazer isso.
ou
e em sua visão
fonte
Não é um grande fã das soluções fornecidas (ou seja: variáveis múltiplas, classes auxiliares, looping por 'variáveis possivelmente existentes'). Abaixo está uma solução que, em vez disso, usa uma matriz em vez de duas variáveis separadas. Também é facilmente extensível para lidar com vários erros, se desejar, mas para simplificar, mantive-o em uma mensagem flash:
Redirecionar com matriz de mensagem flash :
Saída com base no conteúdo da matriz:
Não relacionado, uma vez que você pode ter seu próprio método / plugin de notificação - mas apenas para maior clareza - bootstrapNotify é apenas para iniciar bootstrap-notificação de http://bootstrap-notify.remabledesigns.com/ :
fonte
Para meu aplicativo, criei uma função auxiliar:
layout da mensagem
main.layouts.message
:e importe todos os locais para mostrar a mensagem:
fonte
Eu costumo fazer isso
na minha função store () coloquei um alerta de sucesso assim que salvou corretamente.
na minha função destroy (), eu queria colorir o alerta de vermelho para notificar que ele foi excluído
Observe, criamos dois alertas com diferentes nomes de flash.
E, a meu ver, acrescentarei condições para quando for o momento certo o alerta específico será chamado
Aqui você pode encontrar diferentes estilos de mensagens flash Mensagens Flash no Laravel 5
fonte
Você pode usar macros do Laravel.
Você pode criar
macros.php
emapp/helpers
e incluí-lo routes.php.se desejar colocar suas macros em um arquivo de classe, você pode olhar este tutorial: http://chrishayes.ca/blog/code/laravel-4-object-oriented-form-html-macros-classes-service- fornecedor
Em seu controlador:
Em sua visão
fonte
Acho que o seguinte funcionaria bem com uma linha de códigos menor.
Estou usando um pacote de torradeira, mas você pode ter algo assim em sua visualização.
fonte
No controlador:
Ou
em Blade mostrar mensagem em Blade como seu padrão desejado:
fonte
Basta enviar uma matriz na sessão em vez de uma string, como esta:
fonte
Me deparei com essa maneira elegante de enviar mensagens instantâneas. Foi feito por Jeffrey Way da Laracast. confira ... https://github.com/laracasts/flash
fonte
Se você deseja usar o Alerta Bootstrap para tornar sua visualização mais interativa. Você pode fazer algo assim:
Em sua função: -
Em suas opiniões: -
fonte