2015-12-23 8 views
9

के बाद संरक्षित नहीं है, मैं कुछ कस्टम फ़्लैश संदेशों को लागू करने की कोशिश कर रहा हूं और मुझे रीडायरेक्ट के बाद सत्र डेटा नष्ट होने के साथ कुछ समस्याएं आ रही हैं।सत्र डेटा रीडायरेक्शन

flash('Your topic has been created.'); 

यहाँ flash() समारोह की घोषणा है::

यहाँ कैसे मैं अपने फ़्लैश संदेश बना है

function flash($message, $title = 'Info', $type = 'info') 
{ 
    session()->flash('flash', [ 
     'message' => $message, 
     'title' => $title, 
     'type' => $type,   
    ]); 
} 

और यहाँ कैसे मैं/सत्र की जाँच कर रहा हूँ फ़्लैश संदेशों को प्रदर्शित है, SweetAlerts का उपयोग कर। यह कोड मुख्य लेआउट फ़ाइल के नीचे शामिल है जिसे मैं अपने सभी ब्लेड टेम्पलेट्स में विस्तारित कर रहा हूं।

@if(Session::has('flash')) 
    <script> 
     $(function(){ 
      swal({ 
       title: '{{ Session::get("flash.title") }}', 
       text : '{{ Session::get("flash.message") }}', 
       type : '{{ Session::get("flash.type") }}', 
       timer: 1500, 
       showConfirmButton: false,   
      }) 
     });   
    </script> 
@endif 

कोड ऊपर अगर मैं एक दृश्य प्रदर्शित करने से पहले flash() फ़ंक्शन को कॉल करें, तो की तरह काम करेगा:

public function show($slug) 
{ 
    flash('It works!'); 
    return view('welcome'); 
} 

हालांकि, यह एक पृष्ठ पर एक रीडायरेक्ट करने से पहले काम नहीं करेगा अगर मैं इसे कहते हैं , जैसे:

public function show($slug) 
{ 
    flash('It does not work'); 
    return redirect('/'); 
} 

रीडायरेक्ट पर सत्र डेटा क्यों खो गया है? मैं इसे कैसे बना सकता हूं ताकि मैं अपना फ्लैश संदेश प्रदर्शित कर सकूं?

+0

क्या आप पुनर्निर्देशन से पहले और बाद में यूआरएल जांच सकते हैं? कभी-कभी आप 'www.' के साथ डोमेन पर होते हैं और' www.' के बिना डोमेन पर रीडायरेक्ट करते हैं और इस मामले में आपको सत्र –

उत्तर

3

ऐसा लगता है कि Laravel 5.2 के साथ, मार्गों सत्र ठीक से काम करने के लिए वेब मिडलवेयर में लिपटे किया जाना है।

यह बात तय हो गई:

Route::group(['middleware' => ['web']], function() { 
    // ... 
    Route::post('/topics/{slug}/answer', '[email protected]'); 
    Route::post('/topics/{slug}/unanswer', '[email protected]'); 
    Route::post('/topics/{slug}/delete', '[email protected]'); 
}); 
+2

नहीं दिखाई देगा, मुझे एक ही समस्या है, लेकिन यह समाधान मेरे लिए काम नहीं करता है। 5.2 के लिए – raphael

+0

, वेब स्वचालित रूप से सभी रूट पर लागू नहीं होता है? .. – CodeGuru

+1

@FlyingAtom हां यह बदल गया था, लेकिन उस समय जब मैंने सवाल पूछा कि आपको इसे मैन्युअल रूप से करना है। ;) – Drown

8

मुझे पता चला कि यह सब मार्गों पर वेब मिडलवेयर लागू करने के लिए आवश्यक है। डूब ऐसा करने के लिए कहा है, लेकिन जब से मार्च 23st 2016 टेलर Otwell https://github.com/laravel/laravel/commit/5c30c98db96459b4cc878d085490e4677b0b67ed

पर डिफ़ॉल्ट RouteServiceProvider बदल कि करके परिवर्तन वेब मिडलवेयर सभी मार्गों के लिए स्वचालित रूप से लागू किया जाता है। यदि अब आप इसे अपने रूट.एफ़पी में फिर से लागू करते हैं, तो आप देखेंगे कि web मार्ग सूची (php artisan route:list) पर दो बार दिखाई देता है। यह वास्तव में फ़्लैश डेटा को त्याग देता है।

यह भी देखें: https://laracasts.com/discuss/channels/laravel/session-flash-message-not-working-after-redirect-route/replies/159117 फ़्लैश डेटा के साथ

+0

धन्यवाद, यह मेरा मुद्दा था .. –

+0

अद्भुत पकड़, धन्यवाद – manix

1

पुनर्निर्देशन इस तरह से किया जाता है:

redirect("/blog")->with(["message"=>"Success!"]); 

में जल्दी Laravel 5.2 संस्करणों, अपने Flash और Session डेटा के सभी जमा हो जाती है तभी करें जब आपके रास्ते हैं web middleware समूह के अंदर।

Laravel 5.2.34 के रूप में, सभी मार्गों डिफ़ॉल्ट द्वारा वेब मिडलवेयर उपयोग कर रहे हैं। यदि आप उन्हें फिर से मिडलवेयर वेब समूह में डाल देंगे, तो आप अपने मार्गों पर दो बार वेब मिडलवेयर लागू करेंगे - ऐसे मार्ग Flash या Session डेटा को संरक्षित करने में असमर्थ होंगे।

2

लैरवेल 5.2.34 के साथ, सभी मार्ग डिफ़ॉल्ट रूप से वेब मिडलवेयर का उपयोग कर रहे हैं।

इसलिए, इस बदलें:

Route::group(['middleware' => ['web']], function() { // This will use 2 web middleware 

    // ... 

    Route::post('/foo', '[email protected]'); 

}); 
इस के लिए

:

Route::group([], function() { // This will use the default web middleware 

    // ... 

    Route::post('/foo', '[email protected]'); 

}); 

और फिर अपने नियंत्रक में आप इस्तेमाल कर सकते हैं:

class FooController extends Controller 
{ 
    ... 

    public foo() 
    { 
     ... 

     return redirect('/foo')->withSuccess('Success!!'); 
     // or 
     return redirect('/foo')->with(['success' => 'Success!!']); 
    } 

    ... 
} 
1

मुद्दा मैं था Session::save() रोकने Swal था पुनर्निर्देशन के बाद दिखा रहा है।

0

की जांच करें एपीपी/kernel.php

\Illuminate\Session\Middleware\StartSession::class,

कई बार

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Session\Middleware\StartSession::class, 
    ]; 

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ], 

आप किसी भी एक टिप्पणी कर सकते हैं या इसे हटा परिभाषित किया गया है। हमें केवल एक बार परिभाषित करने की जरूरत है।

संबंधित मुद्दे