Laravel Перенаправлення назад з () повідомленням


158

Я намагаюся переадресувати на попередню сторінку із повідомленням, коли є фатальна помилка.

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

У поданні намагаються отримати доступ до msg за допомогою

Sessions::get('msg')

Але нічого не виходить, я щось тут неправильно роблю?


1
виправити сеанс друку sта додати, useде потрібно. Крім цього - має працювати.
Євген Афанасьєв

Відповіді:


234

Спробуйте

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

а всередині вашого перегляду зателефонуйте цьому

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif

8
Це працює, як круто. Але навіщо цю роботу не return Redirect::back()->with('msg', 'The Message'); робити, як сюди потрапити "msg"?
Мудіт Тулі

Ви намагалися перевірити, чи є повідомлення? Session::has('msg')
giannis christofakis

Так встановлено, Session::has('msg')і "msg" немає.
Мудіт Тулі

2
@giannischristofakis Це, звичайно, схоже. Я поняття не маю, що я курив того холодного туманного ранку у вересні.
StackOverflowed

7
Для 5.4 , withErrors('some error')- значить, повинен бути рядок замість масиву.
відправлений

127

Laravel 5 і пізніші

Контролер

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

Лезо:

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

7
Перетворення на рядок :(
Євгеній Афанасьєв

Коментар залишено як редагувати: Якщо це дає помилку: Array to String Conversion, то лише невелике виправлення в контролері return redirect()->back()->with('success', 'your message here');
Michael

@Michael Що ти маєш на увазі, якщо? Це однозначно повертає масив!
Андрій Саветчук

@AndrewSavetchuk - це не мій коментар. Інший користувач SO відредагував відповідь, коли він просто повинен залишив тут коментар або створив власну відповідь.
Майкл

@Michael, ми повинні відредагувати відповідь правильним способом, тому що якщо запустити цей код, він не буде працювати.
Андрій Саветчук

62

Альтернативний підхід був би

Контролер

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

Вид

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

22

У Laravel 5.4 працювали мені:

return back()->withErrors(['field_name' => ['Your custom message here.']]);

Привіт. Прийнятий відповідь для використання в Laravel 4 (див тег питання), параметри для withErrors()методу у відповіді масив з двох елементів: ['msg', 'The Message']. Про прийнятні параметри див. Api
haakym

У моїй відповіді, для використання в Laravel 5.4, параметри withErrors()методу - це масив з одним елементом, який є key => valueпарою, де значенням є масив. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
haakym

13

У вас помилка (неправильне написання):

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

Має бути:

Session::get('msg')

Я думаю, зараз це має працювати, це робить для мене.


8

Просто встановіть флеш-повідомлення та переспрямуйте його назад до функції контролера.

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

І тоді ви можете отримати повідомлення у файлі леза перегляду.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}

Думаю, цього {!! Session::get("msg", '') !!}має вистачити. get()вже перевіряє, чи існує ключ , і повертає значення за замовчуванням в іншому випадку.
Еміль Бержерон

8

У Laravel 5.5 :

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

У перегляді за допомогою Blade:

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

2
$ errors-> has () не вдалося, але $ error-> any () спрацює добре
robspin

6

У laravel 5.8 ви можете зробити наступне:

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

і в лезі:

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

4

Я перестав писати це сам для laravel на користь пакету Laracasts, який обробляє все це для вас. Це дійсно простий у використанні і підтримує чистий код. Існує навіть ларакаст, який висвітлює, як ним користуватися. Все, що вам потрібно зробити:

Протягніть пакет через Composer.

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

Включіть постачальника послуг у програму app / config / app.php.

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

Додайте псевдонім фасаду до цього ж файлу внизу:

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

Перетягніть HTML у подання:

@include('flash::message') 

Праворуч від кнопки є кнопка закриття. Це спирається на jQuery, тому переконайтеся, що додано перед завантажувальним файлом.

необов'язкові зміни:

Якщо ви не використовуєте завантажувальний інструмент або хочете пропустити включення флеш-повідомлення та написати самому код:

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

Якщо ви хочете переглянути HTML @include('flash::message'), який ви ввійшли , ви можете знайти його vendor/laracasts/flash/src/views/message.blade.php.

Якщо вам потрібно змінити партії:

php artisan view:publish laracasts/flash

Два перегляди пакета тепер будуть розміщені в каталозі `app / views / пакети / laracasts / flash / '.


4

в контролері

Наприклад

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

у файлі леза Повідомлення зберігатиметься в сеансі, а не в змінній.

Наприклад

@if(session('message'))
{{ session('message') }}
@endif

3

Для Laravel 5.5+

Контролер:

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

Лезо:

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

2

Я зіткнувся з тією ж проблемою, і це спрацювало.

Контролер

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

Вид

<div>{{{ $errors->first('user_name') }}}</div>

2

Для laravel 5.6. *

Під час спроби деяких із наданих відповідей у ​​Laravel 5.6. *, Зрозуміло, що відбулися деякі вдосконалення, які я збираюся розмістити тут, щоб полегшити ситуацію тим, хто не зміг знайти рішення з рештою відповідей.

КРОК 1:

Перейдіть до файлу контролера та додайте це до класу:

use Illuminate\Support\Facades\Redirect;

КРОК 2: Додайте це там, де ви хочете повернути переадресацію.

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

КРОК 3: Перейдіть до свого файла леза і відредагуйте наступним чином

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

Потім тестуйте і дякую пізніше.

Це повинно працювати з laravel 5.6. * І, можливо, 5.7. *


1

Для Laravel 3

Просто відповідь на відповідь @giannis christofakis; для всіх, хто використовує Laravel 3 для заміни

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

з:

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

1

Laravel 5.6. *

Контролер

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

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

Шаблон леза

  @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

Еньйой


0

Це повідомлення я отримав, коли намагався переспрямувати як:

public function validateLogin(LoginRequest $request){
    //

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

Коли правильний шлях:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

Контролер

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

Лезо

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.