เปลี่ยนเส้นทาง Laravel กลับด้วย () ข้อความ


158

ฉันกำลังพยายามเปลี่ยนเส้นทางไปยังหน้าก่อนหน้าด้วยข้อความเมื่อมีข้อผิดพลาดร้ายแรง

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

ในมุมมองพยายามเข้าถึงข้อความด้วย

Sessions::get('msg')

แต่ไม่มีการแสดงผลฉันกำลังทำอะไรผิดที่นี่หรือ


1
แก้ไขเซสชันพิมพ์ผิดsและเพิ่มuseที่จำเป็น นอกเหนือจากนั้น - ควรได้ผล
Yevgeniy Afanasyev

คำตอบ:


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" ที่นี่?
Mudit Tuli

คุณพยายามดูว่ามีข้อความนี้หรือไม่? Session::has('msg')
giannis christofakis

ใช่ถูกเลือกSession::has('msg')และ 'msg' ไม่อยู่ที่นั่น
Mudit Tuli

2
@giannischristofakis ดูเหมือนว่าจะชอบ ฉันไม่รู้ว่าฉันกำลังสูบบุหรี่ในเช้าวันที่หมอกหนาในเดือนกันยายน
StackOverflow

7
สำหรับ 5.4 , withErrors('some error')- ดังนั้นจำเป็นต้องเป็นสตริงแทนอาร์เรย์
senty

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
การแปลงเป็นสตริงเป็นสตริง :(
Yevgeniy Afanasyev

ความคิดเห็นที่เหลือเป็นการแก้ไข: หากมีข้อผิดพลาด: Array to String Conversion เพียงแค่แก้ไขเล็ก ๆ ในคอนโทรลเลอร์ return redirect()->back()->with('success', 'your message here');
Michael

@Michael คุณหมายความว่าอะไร? มันจะส่งคืนอาร์เรย์แน่นอน!
Andrew Savetchuk

@AndrewSavetchuk - ไม่ใช่ความคิดเห็นของฉัน ผู้ใช้ SO รายอื่นได้แก้ไขคำตอบเมื่อเขาควรทิ้งความคิดเห็นไว้ที่นี่หรือสร้างคำตอบของเขาเอง
ไมเคิล

@Michael เราควรแก้ไขคำตอบอย่างถูกต้องเพราะถ้าคุณเรียกใช้รหัสนั้นมันจะไม่ทำงาน
Andrew Savetchuk

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 สำหรับพารามิเตอร์ที่ยอมรับได้: 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()ตรวจสอบว่ามีคีย์อยู่แล้วและส่งคืนค่าเริ่มต้นเป็นอย่างอื่น
Emile Bergeron

8

ใน Laravel 5.5 :

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

ในมุมมองโดยใช้เบลด:

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

2
$ ข้อผิดพลาด -> มี () ล้มเหลว แต่ $ ข้อผิดพลาด -> ใด ๆ () ทำงานได้ดี
robspin

6

ใน laravel 5.8 คุณสามารถทำสิ่งต่อไปนี้:

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

และในใบมีด:

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

4

ฉันหยุดเขียนตัวเองเพื่อ laravel เพื่อใช้กับแพ็คเกจ Laracastsที่จัดการทุกอย่างให้คุณ มันใช้งานง่ายและทำให้โค้ดของคุณสะอาดอยู่เสมอ มีlaracastที่ครอบคลุมถึงวิธีการใช้ สิ่งที่คุณต้องทำ:

ดึงในแพ็คเกจผ่าน Composer

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

รวมผู้ให้บริการในแอพ / config / app.php

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

เพิ่มนามแฝงซุ้มให้ไฟล์เดียวกันนี้ที่ด้านล่าง:

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

ดึง HTML เข้าสู่มุมมอง:

@include('flash::message') 

มีปุ่มปิดที่ด้านขวาของข้อความ สิ่งนี้ขึ้นอยู่กับ jQuery เพื่อให้แน่ใจว่าจะถูกเพิ่มก่อน bootstrap ของคุณ

การเปลี่ยนแปลงเสริม:

หากคุณไม่ได้ใช้ 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 / '


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

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();

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.