Chuyển hướng trở lại với thông điệp ()


158

Tôi đang cố gắng chuyển hướng đến trang trước với một thông báo khi có lỗi nghiêm trọng.

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

Trong chế độ xem cố gắng truy cập thông điệp với

Sessions::get('msg')

Nhưng không có gì được trả lại, tôi đang làm gì sai ở đây?


1
sửa lỗi đánh máy Phiên s, và thêm vào usenơi cần thiết. Ngoài nó - nên làm việc.
Yevgeniy Afanasyev

Câu trả lời:


234

Thử

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

và trong quan điểm của bạn gọi đây

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

8
Điều này làm việc, làm thế nào mát mẻ. Nhưng tại sao điều này không hoạt động làm return Redirect::back()->with('msg', 'The Message'); thế nào để có được "thông điệp" ở đây?
Mudit Tuli

Bạn đã thử xem tin nhắn có ở đó không? Session::has('msg')
gianni christofakis

Có kiểm tra Session::has('msg')và 'thông điệp' không có ở đó.
Mudit Tuli

2
@giannischristofakis Có vẻ như nó thích. Tôi không biết mình đã hút cái gì vào buổi sáng sương mù lạnh lẽo vào tháng Chín.
StackOverflow

7
Đối với 5.4 , withErrors('some error')- vì vậy cần phải là một chuỗi thay vì mảng.
senty

127

Ấu trùng 5 trở lên

Bộ điều khiển

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

Lưỡi:

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

7
Chuyển đổi mảng thành chuỗi :(
Yevgeniy Afanasyev

Nhận xét bên trái là chỉnh sửa: Nếu nó đưa ra Lỗi: Chuyển đổi mảng thành chuỗi, thì chỉ cần sửa lỗi nhỏ trong bộ điều khiển return redirect()->back()->with('success', 'your message here');
Michael

@Michael Ý bạn là gì nếu? Nó chắc chắn trả về một mảng!
Andrew Savetchuk

@AndrewSavetchuk - đó không phải là nhận xét của tôi. Một người dùng SO khác đã chỉnh sửa câu trả lời khi anh ta nên để lại bình luận ở đây hoặc tự tạo câu trả lời.
Michael

@Michael chúng ta nên chỉnh sửa câu trả lời đúng cách vì nếu bạn chạy mã đó thì nó sẽ không hoạt động.
Andrew Savetchuk

62

Phương pháp thay thế sẽ là

Bộ điều khiển

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

Lượt xem

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

22

Trong Laravel 5.4, những điều sau đây làm việc cho tôi:

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

Chào. Câu trả lời được chấp nhận là để sử dụng trong Laravel 4 (xem thẻ câu hỏi), các tham số cho withErrors()phương thức trong câu trả lời là một mảng có hai phần tử : ['msg', 'The Message']. Xem api để biết các thông số có thể chấp nhận: laravel.com/api/4.2/Illuminate/Http/ Kẻ
haakym

Trong câu trả lời của tôi, để sử dụng trong Laravel 5.4, các tham số cho withErrors()phương thức là một mảng có một phần tử là một key => valuecặp, trong đó giá trị là một mảng. 5,4 API: laravel.com/api/5.4/Illuminate/Http/ từ
haakym

13

Bạn có một lỗi (sai chính tả):

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

Nên là:

Session::get('msg')

Tôi nghĩ rằng, bây giờ nó nên làm việc, nó làm cho tôi.


8

Chỉ cần đặt thông báo flash và chuyển hướng trở lại từ bộ điều khiển functiion của bạn.

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

Và sau đó bạn có thể nhận được thông báo trong tệp xem lưỡi.

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

Tôi nghĩ {!! Session::get("msg", '') !!}nên là đủ. get()đã kiểm tra nếu khóa tồn tại và trả về giá trị mặc định khác.
Emile Bergeron

8

Trong Laravel 5.5 :

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

Trong chế độ xem bằng Blade:

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

2
$ lỗi-> has () đã thất bại nhưng $ error-> any () hoạt động tốt
robspin

6

Trong laravel 5,8 bạn có thể làm như sau:

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

và trong lưỡi dao:

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

4

Tôi đã ngừng viết điều này cho bản thân mình để ủng hộ gói Laracasts xử lý tất cả cho bạn. Nó thực sự dễ sử dụng và giữ cho mã của bạn sạch sẽ. Thậm chí còn có một laracast bao gồm cách sử dụng nó. Tất cả những gì bạn phải làm:

Kéo gói thông qua Trình soạn thảo.

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

Bao gồm nhà cung cấp dịch vụ trong app / config / app.php.

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

Thêm bí danh mặt tiền vào cùng tệp này ở phía dưới:

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

Kéo HTML vào dạng xem:

@include('flash::message') 

Có một nút đóng ở bên phải của tin nhắn. Điều này phụ thuộc vào jQuery, vì vậy hãy chắc chắn rằng nó đã được thêm vào trước bootstrap của bạn.

thay đổi tùy chọn:

Nếu bạn không sử dụng bootstrap hoặc muốn bỏ qua phần bao gồm thông báo flash và tự viết mã:

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

Nếu bạn muốn xem HTML được kéo vào @include('flash::message'), bạn có thể tìm thấy nó trong vendor/laracasts/flash/src/views/message.blade.php.

Nếu bạn cần sửa đổi các partials, hãy làm:

php artisan view:publish laracasts/flash

Hai chế độ xem gói bây giờ sẽ được đặt trong thư mục `app / Views / gói / laracasts / flash / '.


4

trong bộ điều khiển

Ví dụ

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

trong tập tin lưỡi Thông báo sẽ lưu trữ trong phiên không thay đổi.

Ví dụ

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

3

Dành cho Laravel 5.5+

Điều khiển:

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

Lưỡi:

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

2

Tôi đã đối mặt với cùng một vấn đề và điều này đã làm việc.

Bộ điều khiển

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

Lượt xem

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

2

Đối với ấu trùng 5.6. *

Trong khi thử một số câu trả lời được cung cấp trong Laravel 5.6. *, Rõ ràng đã có một số cải tiến mà tôi sẽ đăng ở đây để làm cho mọi người không thể tìm ra giải pháp với phần còn lại của câu trả lời.

BƯỚC 1:

Chuyển đến Tệp điều khiển của bạn và Thêm tệp này trước lớp:

use Illuminate\Support\Facades\Redirect;

BƯỚC 2: Thêm cái này vào nơi bạn muốn trả lại chuyển hướng.

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

BƯỚC 3: Chuyển đến tệp lưỡi của bạn và chỉnh sửa như sau

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

Sau đó kiểm tra và cảm ơn tôi sau.

Điều này sẽ hoạt động với laravel 5.6. * Và có thể 5.7. *


1

Đối với Laravel 3

Chỉ cần một cái đầu lên trên câu trả lời @gianni christofakis; cho bất cứ ai sử dụng thay thế Laravel 3

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

với:

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

1

Ấu trùng 5.6. *

Bộ điều khiển

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

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

Mẫu Blade

  @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

Tôi nhận được thông báo này khi tôi cố gắng chuyển hướng như:

public function validateLogin(LoginRequest $request){
    //

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

Khi đúng cách là:

public function validateLogin(LoginRequest $request){
    //

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

0

Ấu trùng 5,8

Bộ điều khiển

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

Lưỡi

  @if (Session::has('error'))
       <div class="alert alert-warning" role="alert">
           {{Session::get('error')}}
       </div>
  @endif
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.