Tworzę swoją pierwszą aplikację w Laravel i próbuję poradzić sobie z wiadomościami flash sesji. O ile wiem, w mojej akcji kontrolera mogę ustawić wiadomość flash, przechodząc
Redirect::to('users/login')->with('message', 'Thanks for registering!'); //is this actually OK?
W przypadku przekierowania na inną trasę lub
Session::flash('message', 'This is a message!');
W moim głównym szablonie ostrza miałbym wtedy:
@if(Session::has('message'))
<p class="alert alert-info">{{ Session::get('message') }}</p>
@endif
Jak można zauważyć używam Bootstrap 3 w mojej aplikacji i chciałby skorzystać z różnych klas wiadomości: alert-info
, alert-warning
, alert-danger
itd.
Zakładając, że w kontrolerze wiem, jaki typ wiadomości ustawiam, w jaki sposób najlepiej ją przekazać i wyświetlić w widoku? Czy powinienem ustawić osobną wiadomość w sesji dla każdego typu (np. Session::flash('message_danger', 'This is a nasty message! Something's wrong.');
)? Wtedy potrzebowałbym oddzielnego oświadczenia if dla każdej wiadomości w moim szablonie ostrza.
Wszelkie rady mile widziane.
Odpowiedzi:
Jednym z rozwiązań byłoby umieszczenie w sesji dwóch zmiennych:
na przykład:
Zatem Twoim zdaniem:
Uwaga mam umieścić wartość domyślną w
Session::get()
. w ten sposób musisz to zmienić tylko wtedy, gdy ostrzeżenie powinno być czymś innym niżalert-info
klasa.(to jest szybki przykład i nieprzetestowany :))
źródło
Session::get()
To będzie bardzo przydatne.Twoim zdaniem:
Następnie ustaw wiadomość flash w kontrolerze:
źródło
Moim sposobem jest zawsze Redirect :: back () lub Redirect :: to ():
Mam funkcję pomocniczą, aby to działało u mnie, zwykle jest to w osobnej usłudze:
I moim zdaniem lub układem po prostu to robię
źródło
$type = $type == 'error' : 'danger';
Możesz tworzyć wiele wiadomości i używać różnych typów. Wykonaj poniższe czynności:
app/Components/FlashMessages.php
”app/Http/Controllers/Controller.php
”.Dzięki temu
FlashMessages
cecha będzie dostępna dla wszystkich kontrolerów rozszerzających tę klasę.views/partials/messages.blade.php
”boot()
" metodzie "app/Providers/AppServiceProvider.php
":Dzięki temu
$messages
zmienna będzie "views/partials/message.blade.php
" dostępna dla szablonu za każdym razem, gdy zostanie wywołana.views/partials/messages.blade.php
”Musisz tylko dołączyć szablon wiadomości wszędzie tam, gdzie chcesz wyświetlać wiadomości na swojej stronie.
Mam nadzieję, że ci to pomoże.
źródło
Po prostu wróć z „flagą”, którą chcesz traktować, bez korzystania z żadnej dodatkowej funkcji użytkownika. Kontroler:
Zauważ, że użyłem flagi „Sukces”.
Widok:
Tak, to naprawdę działa!
źródło
Innym rozwiązaniem byłoby utworzenie klasy pomocniczej. Jak tutaj utworzyć klasy pomocnicze
Wtedy możesz to zrobić.
lub
i Twoim zdaniem
źródło
Nie jest wielkim fanem dostarczonych rozwiązań (np. Wielu zmiennych, klas pomocniczych, zapętlanie się po „prawdopodobnie istniejących zmiennych”). Poniżej znajduje się rozwiązanie, które zamiast tego wykorzystuje tablicę, a nie dwie oddzielne zmienne. Jest również łatwo rozszerzalny, aby obsłużyć wiele błędów, jeśli chcesz, ale dla uproszczenia ograniczyłem to do jednej wiadomości flash:
Przekierowanie z tablicą wiadomości flash :
Dane wyjściowe na podstawie zawartości tablicy:
Niepowiązane, ponieważ możesz mieć własną metodę / wtyczkę powiadamiania - ale tylko dla jasności - bootstrapNotify służy tylko do zainicjowania powiadomienia bootstrap z http://bootstrap-notify.remabledesigns.com/ :
źródło
Dla mojej aplikacji utworzyłem funkcję pomocniczą:
Układ komunikat
main.layouts.message
:i importuj wszędzie, gdzie chcesz pokazać wiadomość:
źródło
Zwykle to robię
W mojej funkcji store () umieszczam alert o sukcesie, gdy zostanie poprawnie zapisany.
w mojej funkcji zniszcz () chciałem pokolorować alert na czerwono, aby powiadomić o jego usunięciu
Zauważ, że tworzymy dwa alerty z różnymi nazwami flash.
I moim zdaniem dodam warunek, kiedy we właściwym czasie zostanie wywołany konkretny alert
Tutaj możesz znaleźć różne style wiadomości flashowych Wiadomości flashowe w Laravel 5
źródło
Możesz użyć makr Laravel.
Można utworzyć
macros.php
wapp/helpers
i włączenie go routes.php.jeśli zamiast tego chcesz umieścić swoje makra w pliku klasy, możesz zapoznać się z tym samouczkiem: http://chrishayes.ca/blog/code/laravel-4-object-oriented-form-html-macros-classes-service- dostawca
W kontrolerze:
W Twoim widoku
źródło
Myślę, że poniższe działałyby dobrze z mniejszą linią kodów.
Używam pakietu tostera, ale możesz mieć coś takiego w swoim widoku.
źródło
W kontrolerze:
Lub
w Blade pokaż komunikat w Blade As your Desired Pattern:
źródło
Po prostu wyślij tablicę w sesji zamiast ciągu, na przykład:
źródło
Trafiłem na ten elegancki sposób przesyłania wiadomości flash. Wykonał go Jeffrey Way z Laracast. sprawdź to ... https://github.com/laracasts/flash
źródło
Jeśli chcesz użyć Alert Bootstrap, aby Twój widok był bardziej interaktywny. Możesz zrobić coś takiego:
W twojej funkcji: -
W Twoich poglądach: -
źródło