php एक नियंत्रक विधि से एक मार्ग के लिए कैसे पुनर्निर्देशित करें




laravel laravel-5 (4)

जबकि @ जेथिन जोस के सवाल ने उत्तर दिया, मैं इसे उन लोगों के लिए उत्तर के रूप में जोड़ रहा हूं जो भविष्य में इस पर विचार करते हैं, और सत्र में इस तरह से चीजों को प्राप्त करने के लिए कौन नहीं चाहता है:

ऐसा करने के लिए न अनुशंसित तरीका नियंत्रक विधि से सीधे नियंत्रक को कॉल करना है, और इसके लिए आवश्यक चर को पास करना है:

$request->setMethod('GET'); //set the Request method
$request->merge(['email' => $email]); //include the request param
$this->index($request)); //call the function

यह ठीक हो जाएगा यदि अन्य नियंत्रक विधि एक ही कक्षा में मौजूद है, अन्यथा आपको बस उस पद्धति को प्राप्त करना होगा जो आपको चाहिए और इसे पुन: उपयोग करें।

सबसे अच्छा अनुशंसित तरीका यदि आप सत्र से बचना चाहते हैं तो नियंत्रक क्रियाओं को पुन: निर्देशित करना है :

return redirect()->action(
   '[email protected]', ['email' => $email]
);

मुझे आशा है कि यह उपयोगी है :)

मैंने अपने नियंत्रक में एक विधि परिभाषित की है, जहां निविष्टियां पहले पुनः प्राप्त की गई हैं, और यदि मेरे डेटाबेस में ईमेल फ़ील्ड मौजूद है, तो मैं एक दृश्य वापस करना चाहता हूं। हालांकि, अगर ईमेल फ़ील्ड मौजूद नहीं है, तो मैं किसी अन्य मार्ग पर पुनर्निर्देशित करना चाहता हूं। मैं भी उस रास्ते के लिए इनपुट में पास करना चाहूंगा।

बेहतर समझने के लिए कि मेरा क्या मतलब है, मेरा कोड मेरे नियंत्रक के लिए निम्नानुसार है:

    public function index(Request $request) {

    $credentials = $request->all();

    if (\App\User::where('email','=',$credentials['email'])->exists()){

        //if they are registered, return VIEW called welcome, with inputs

        return view('welcome', $credentials);

    }
    else{//If the user is not in the database, redirect to '/profile' route,
         //but also send their data

        return redirect('profile', $credentials);

    }

और मेरे web.php इस प्रकार है:

Route::post('/profile', function() {
     $m = Request::only('email'); //I only need the email
     return view('profile', $m);
});

हालांकि, यह तर्क त्रुटियों के साथ विफल रहता है: 'HTTP स्थिति कोड' 1 'परिभाषित नहीं है' वैसे भी यह ठीक से करने के लिए है? (यानी मेरे नियंत्रक विधि से दूसरे मार्ग पर जाना है?)


आप redirect() विधि का उपयोग कर सकते हैं

return redirect()->route('route.name')->with(['email'=> '[email protected]']);

redirect() with() साथ प्रयोग करने से, सत्र में 'ईमेल' जोड़ देगा (अनुरोध नहीं) । इसके साथ ईमेल प्राप्त करें:

request()->session()->get('email')
//Or
session('email')

जिस मार्ग को आप redirect() करना चाहते हैं उसे परिभाषित करने की आवश्यकता होगी redirect()

return redirect()->route('profile')->with('credentials', $credentials);

विकल्प के with सत्र को फ्लैश किया जाता है, जिसे एक्सेस के रूप में पहुंचाया जा सकता है जैसे कि सीधे दृश्य को पास किया गया हो

session और फ्लैशिंग डेटा के बारे में और जानकारी यहां पायी जा सकती है

एक रीडायरेक्ट के बाद फ्लैशिंग डेटा के बारे में जानकारी यहां पाई जा सकती है

आपके मामले में आप इसका इस्तेमाल कर सकते हैं:

return redirect()->route('profile')->with('email', $credentials['email']);

आपके विचार में आप इसे इस्तेमाल कर सकते हैं:

@if(session()->has('email')
    We have the email of the user: {{ session('email') }}
@endif

कृपया अपना व्यू पथ बदलें जैसे:

return view('welcome', compact(credentials));

return redirect()->route('profile')->with('credentials',$credentials);






laravel-5.4