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

103

Я пытаюсь перенаправить на предыдущую страницу с сообщением, когда есть фатальная ошибка.

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

В представлении пытается получить доступ к MSG с

Sessions::get('msg')

Но ничего не получается, я что-то здесь не так делаю?

  • 0
    Зафиксируем опечатка Session s , а также добавить use , где это необходимо. Помимо этого - должно работать.
Теги:
laravel-5
laravel-4

12 ответов

152
Лучший ответ

Try

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

и внутри вашего вида вызывают это

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
  • 3
    Это работает, как круто. Но почему бы не выполнить эту работу return Redirect::back()->with('msg', 'The Message'); как получить "сообщение" здесь?
  • 0
    Вы пытались увидеть, есть ли сообщение? Session::has('msg')
Показать ещё 7 комментариев
69

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

Если выдает Error: Array to String Conversion, то просто небольшое исправление в контроллере

return redirect()->back()->with('success', 'your message here'); 
  • 5
    Преобразование массива в строку :(
48

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

контроллер

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

Вид

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

В Laravel 5.4 для меня работало следующее:

return back()->withErrors(['field_name' => ['Your custom message here.']]);
  • 0
    Привет. Принятый ответ предназначен для использования в Laravel 4 (см. Тег вопроса), параметры withErrors() в ответе - это массив с двумя элементами: ['msg', 'The Message'] . Смотрите API для приемлемых параметров: laravel.com/api/4.2/Illuminate/Http/…
  • 0
    В моем ответе для использования в Laravel 5.4 параметры для withErrors() - это массив с одним элементом, который является парой key => value , где значение является массивом. 5.4 API: laravel.com/api/5.4/Illuminate/Http/…
Показать ещё 1 комментарий
13

У вас есть ошибка (орфографическая ошибка):

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

Должно быть:

Session::get('msg')

Я думаю, теперь это должно сработать, это для меня.

6

Просто установите флеш-сообщение и переадресовывайте обратно с функциональности вашего контроллера.

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

И затем вы можете получить сообщение в файле лезвия просмотра.

   {!! Session::has('msg') ? Session::get("msg") : '' !!}
  • 0
    Я думаю {!! Session::get("msg", '') !!} должно быть достаточно. get() уже проверяет, существует ли ключ, и возвращает значение по умолчанию в противном случае.
5

В Laravel 5.5:

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

В представлении, используя Blade:

@if($errors->has())
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif
  • 1
    $ errors-> has () не удалось, но $ errors-> any () работает хорошо
4

Я перестал писать это сам для laravel в пользу пакета Laracasts, который обрабатывает все это для вас. Он очень прост в использовании и сохраняет ваш код в чистоте. Существует даже laracast, в котором описывается, как его использовать. Все, что вам нужно сделать:

Потяните пакет через композитор.

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

Включите поставщика услуг в app/config/app.php.

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

Добавьте псевдоним фасада к этому же файлу внизу:

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

Потяните HTML в представление:

@include('flash::message') 

Рядом с сообщением находится кнопка закрытия. Это зависит от jQuery, поэтому убедитесь, что он добавлен до вашего загрузочного файла.

дополнительные изменения:

Если вы не используете bootstrap или хотите пропустить включение флеш-сообщения и написать код самостоятельно:

@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/'.

1

Для Laravel 3

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

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

с:

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

Я столкнулся с той же проблемой, и это сработало.

контроллер

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

Вид

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню