Laravel Redirect Вернуться с () Сообщение

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')
Джаннис Кристофакис
Да, проверено, Session::has('msg')и «MSG» не существует.
Мудит Тули
2
@giannischristofakis Похоже, это так. Я понятия не имею, что я курил тем холодным туманным утром в сентябре.
Переполнение
7
Для 5.4 , withErrors('some error')- так должно быть строкой , а не массив.
Senty
127

Ларавел 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
Преобразование массива в строку :(
Евгений Афанасьев
Комментарий оставлен как редактирование: если он дает Ошибка: Преобразование массива в строку, то просто небольшое исправление в контроллере return redirect()->back()->with('success', 'your message here');
Майкл
@ Майкл Что ты имеешь в виду, если? Это определенно возвращает массив!
Андрей Саветчук
@AndrewSavetchuk - это не мой комментарий. Другой пользователь SO отредактировал ответ, когда он должен был просто оставить комментарий здесь или создать свой собственный ответ.
Майкл
@ Майкл, мы должны правильно отредактировать ответ, потому что если вы запустите этот код, он не будет работать.
Андрей Саветчук
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.']]);
haakym
источник
Здравствуй. Принятый ответ для использования в Laravel 4 (см тег вопроса), параметры для withErrors()метода в ответе массив из двух элементов: ['msg', 'The Message']. См. API для приемлемых параметров: laravel.com/api/4.2/Illuminate/Http/…
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
Sergio
источник
2
$ errors-> has () не удалось, но $ errors-> any () работает хорошо
robspin
6

В laravel 5.8 вы можете сделать следующее:

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

и в лезвии:

@error('name')
<p>{{ $message }}</p>
@enderror
justijn
источник
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 / packages / laracasts / flash / '.

DutGRIFF
источник
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. *

Akintunde
источник
1

Для Laravel 3

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

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

с участием:

return Redirect::back()->with_errors(['msg', 'The Message']);
Dev1997
источник
1

Ларавел 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

Enyoj

Бампер
источник
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();
Manix
источник
0

Ларавел 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
wobsoriano
источник