Redirecionamento do Laravel Voltar com () mensagem


158

Estou tentando redirecionar para a página anterior com uma mensagem quando há um erro fatal.

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

Na visão, tentando acessar a mensagem com

Sessions::get('msg')

Mas nada está sendo processado, estou fazendo algo errado aqui?


1
corrija a sessão de erro de digitação se adicione useonde for necessário. Além disso - deve funcionar.
Yevgeniy Afanasyev

Respostas:


234

Experimentar

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

e dentro da sua visão chame isso

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

8
Isso funciona, que legal. Mas por que isso não funciona return Redirect::back()->with('msg', 'The Message'); como obter o "msg" aqui?
Mudit Tuli

Você já tentou ver se a mensagem está lá? Session::has('msg')
Giannis christofakis

Sim marcado Session::has('msg')e o 'msg' não está lá.
Mudit Tuli

2
@giannischristofakis Com certeza parece que sim. Não tenho ideia do que eu estava fumando naquela manhã fria e nublada em setembro.
StackOverflowed

7
Para 5.4 , withErrors('some error')- então precisa ser uma string em vez de uma matriz.
Senty 17/05

127

Laravel 5 e posterior

Controlador

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

Lâmina:

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

7
Conversão de matriz para string :(
Yevgeniy Afanasyev 15/06

Comentário esquerda como edit: Se ele dá erro: Array de Conversão String, em seguida, basta pequena correção no controlador return redirect()->back()->with('success', 'your message here');
Michael

@ Michael O que você quer dizer com isso? Definitivamente retorna uma matriz!
Andrew Savetchuk 01/08/19

@AndrewSavetchuk - não é o meu comentário. Outro usuário do SO havia editado a resposta quando deveria deixar um comentário aqui ou criar sua própria resposta.
Michael

@ Michael, devemos editar a resposta da maneira correta, porque se você executar esse código, ele não funcionará.
Andrew Savetchuk

62

Abordagem alternativa seria

Controlador

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

Visão

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

22

No Laravel 5.4, o seguinte funcionou para mim:

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

Oi. A resposta é aceite para utilização em Laravel 4 (ver a etiqueta questão), os parâmetros para o withErrors()método em que a resposta é uma matriz com dois elementos: ['msg', 'The Message']. Veja a API para obter parâmetros aceitáveis: laravel.com/api/4.2/Illuminate/Http/…
haakym

Na minha resposta, para uso no Laravel 5.4, os parâmetros para o withErrors()método são uma matriz com um elemento que é um key => valuepar, em que o valor é uma matriz. API 5.4: laravel.com/api/5.4/Illuminate/Http/…
haakym

13

Você tem um erro (erro de ortografia):

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

Deveria estar:

Session::get('msg')

Eu acho que agora deve funcionar, funciona para mim.


8

Basta definir a mensagem flash e redirecionar para voltar da sua função de controlador.

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

E então você pode receber a mensagem no arquivo blade de exibição.

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

Eu acho que {!! Session::get("msg", '') !!}deveria ser o suficiente. get()já verifica se a chave existe e retorna o valor padrão caso contrário.
Emile Bergeron

8

No Laravel 5.5 :

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

Na visualização usando o Blade:

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

2
$ errors-> tem () foi falhar, mas $ errors-> qualquer trabalho () bem
robspin

6

No laravel 5.8, você pode fazer o seguinte:

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

e na lâmina:

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

4

Parei de escrever isso para laravel em favor do pacote Laracasts que lida com tudo isso para você. É realmente fácil de usar e mantém seu código limpo. Existe até um laracast que cobre como usá-lo. Tudo que você tem a fazer:

Puxe a embalagem pelo Composer.

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

Inclua o provedor de serviços em app / config / app.php.

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

Adicione um alias de fachada a esse mesmo arquivo na parte inferior:

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

Puxe o HTML para a exibição:

@include('flash::message') 

Há um botão fechar à direita da mensagem. Isso depende do jQuery, portanto, verifique se ele foi adicionado antes da sua inicialização.

mudanças opcionais:

Se você não estiver usando o bootstrap ou quiser pular a inclusão da mensagem em flash e escrever o código você mesmo:

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

Se você deseja visualizar o HTML extraído @include('flash::message'), pode encontrá-lo vendor/laracasts/flash/src/views/message.blade.php.

Se você precisar modificar as parciais, faça:

php artisan view:publish laracasts/flash

As duas visualizações de pacotes agora estarão localizadas no diretório `app / views / packages / laracasts / flash / '.


4

no controlador

Por exemplo

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

no arquivo blade A mensagem será armazenada na sessão e não na variável.

Por exemplo

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

3

Para o Laravel 5.5+

Controlador:

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

Lâmina:

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

2

Eu enfrentei o mesmo problema e isso funcionou.

Controlador

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

Visão

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

2

Para o laravel 5.6. *

Ao tentar algumas das respostas fornecidas no Laravel 5.6. *, Fica claro que houve algumas melhorias que vou postar aqui para facilitar as coisas para aqueles que não conseguiram encontrar uma solução com o restante das respostas.

PASSO 1:

Vá para o seu arquivo Controller e adicione isso antes da aula:

use Illuminate\Support\Facades\Redirect;

PASSO 2: adicione isto onde deseja retornar o redirecionamento.

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

PASSO 3: Vá para o seu arquivo blade e edite da seguinte maneira

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

Depois teste e agradeça mais tarde.

Isso deve funcionar com o laravel 5.6. * E possivelmente 5.7. *


1

Para o Laravel 3

Apenas um aviso sobre a resposta de @giannis christofakis; para quem usa o Laravel 3, substitua

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

com:

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

1

Laravel 5.6. *

Controlador

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

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

Modelo de lâmina

  @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

Recebi esta mensagem quando tentei redirecionar como:

public function validateLogin(LoginRequest $request){
    //

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

Quando o caminho certo é:

public function validateLogin(LoginRequest $request){
    //

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

0

Laravel 5.8

Controlador

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

Lâmina

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.