2015-11-24 16 views
6

में पिछले पृष्ठ के आधार पर विभिन्न पृष्ठों पर रीडायरेक्ट करें कल्पना कीजिए कि आपके पास एक नई कंपनी को स्टोर करने जैसी नियंत्रक में एक विधि है। यह भी कल्पना करें कि हम अपनी साइट के विभिन्न पृष्ठों से नई कंपनी बना सकते हैं। उदाहरण के लिए, मैं 2-3 पृष्ठों से एक कंपनी बना सकता हूं।लार्वेल

इस पर निर्भर करता है कि मैंने कंपनी को कहां बनाया है, मुझे अलग-अलग रीडायरेक्ट की आवश्यकता है। कभी-कभी मुझे वापस रीडायरेक्ट करने की आवश्यकता होती है, और कभी-कभी अन्य मार्गों पर भी।

कुछ की तरह:

if ($previousRoute === 'companies.index') { 
    return redirect()->back(); 
} else { 
    return redirect()->route('someroute'); 
} 

मुझे लगता है मैं मार्ग नाम नहीं मिल सकता है wher उपयोगकर्ता से आया है। अगर मैं रेफरर यूआरएल जांचता हूं तो अगर मैं रूट यूआरएल बदलता हूं तो सब कुछ टूटा जाएगा इसलिए मैं इसके बजाय रूट नामों पर भरोसा करना चाहता हूं। इसके अलावा, कई "if-s" या "स्विच" वाले समाधान में अजीब तरह का समाधान है, यह कोड को प्रदूषित करेगा।

इसके अलावा वाइल्डकार्ड समर्थन की आवश्यकता है। रीडायरेक्ट या इस तरह के कुछ के साथ कुछ प्रकार का मार्ग मानचित्र।

कोई सलाह यह कैसे कार्यान्वित करें?

+1

जब से मैं आप नियंत्रक कार्रवाई करने के लिए पोस्ट कर रहे हैं अनुमान लगा रहा हूँ, क्यों तुम सिर्फ एक मूल्य इंगित करता है कि क्या है या नहीं तुम वापस पुनः निर्देशित किया जाना चाहिए पारित नहीं कर सकते हैं? और आप केवल उस फॉर्म पर उस मूल्य को शामिल कर सकते हैं (क्योंकि आपने कहा है कि आपके पास 2-3 पेज हैं जो ऐसा करते हैं, मुझे लगता है कि आप प्रत्येक के रूप में फॉर्म को समायोजित कर सकते हैं क्योंकि यह आपके अनुरूप है)। आपके द्वारा प्राप्त दृष्टिकोण में विश्वसनीय समाधान नहीं हैं और यह अत्यधिक जटिल है। – Bogdan

+0

बहुत बढ़िया समाधान। एकमात्र चीज है, अभी मेरे पास फॉर्म के साथ एक मोडल विंडो है। मैं मोडल दिखाता हूं जब मैं विभिन्न बटनों पर क्लिक करता हूं और जहां मैंने क्लिक किया है, इस पर निर्भर करता है कि मुझे उपयोगकर्ता को विभिन्न पृष्ठों पर रीडायरेक्ट करने की आवश्यकता है। तो मैंने 3 फाइलें बनाई: form.blade.php, modal1.blade.php और modal2.blade.php। मैं इन मॉडलों में फॉर्म शामिल करता हूं और उन्हें param_to param को भेजता हूं, और अंदर के रूप में मैंने इस पैरा – Victor

उत्तर

0

ठीक है, आप किसी भी मार्ग के यूआरएल के साथ पिछले यूआरएल की तुलना कर सकते हैं। यह सबसे अच्छा समाधान नहीं है और मुझे नहीं पता कि मार्ग पैरामीटर के साथ क्या करना है, लेकिन यह काम कर सकता है।

if (URL::previous() === URL::route('companies.index')) { 
    return redirect()->back(); 
} else { 
    return redirect()->route('someroute'); 
} 
+0

मैं इस से चिपके रहूंगा, हालांकि मुझे बोगदान के समाधान भी पसंद हैं – Victor

0

if बयान (या एक switch) का एक सेट आवश्यक कहीं हो जाएगा, जब से तुम एक निर्णय करने के लिए किया है।

मैं रेफरर यूआरएल पर भरोसा नहीं करता, क्योंकि यदि आप कभी भी अपने मार्ग बदलते हैं तो यह टूट जाएगा। आप की तरह, मैं अपने यूआरएल बदल सकते हैं क्योंकि मैं सब कुछ के लिए मार्ग नाम पसंद करते हैं।

सत्र कुंजी के बारे में कैसे? कुछ मान सेट करें, फिर इसे & पुनर्प्राप्त करें कंपनी के निर्माण के बाद अपना रीडायरेक्ट चुनें। , तब कंपनी पेज # 1

Session::put('create-company-method', 1); 

बनाने के बाद कंपनी

$flag = Session::get('create-company-method'); 
if ($flag===1) { 
    return redirect()->route('go-here-next'); 
} else if ($flag===2) { 
    ... 
} 

यह बहुत नहीं है, लेकिन यह चाल करना होगा बनाई गई है के लिए

नियंत्रक विधि में: कुछ इस तरह। इसके अलावा इसका एक बड़ा फायदा है: आप जो भी चाहें सत्र मूल्य बना सकते हैं, इसलिए यदि आपको निर्णय लेने के लिए अतिरिक्त जानकारी जोड़ने की आवश्यकता है, तो आगे बढ़ें। आपको वाइल्डकार्ड चाहिए? सत्र कुंजी सेट करें हालांकि आप उस जानकारी को साथ पास करना चाहते हैं।

+0

के साथ छुपा इनपुट रखा है, सत्र में मान संग्रहीत करना पास संदर्भकर्ता का उपयोग करने के रूप में अविश्वसनीय है, क्योंकि उपयोगकर्ता के पास ब्राउज़र में एकाधिक टैब खुल सकते हैं, वे सभी एक ही सत्र साझा करते हैं। जैसे ही रेफरर को धोखा दिया जा सकता है या गायब हो सकता है, आप यह सुनिश्चित नहीं कर सकते कि पिछला पृष्ठ सत्र मान सेट करने वाला था। – Bogdan

0

मैं कर सकता नहीं unterstand अगर तुम वापस मार्ग आप Company सहेजने के बाद पीछे किसी भी "तर्क" की है। मेरे ऐप्स में से एक में मुझे एक पता संपादित करने और पिछले यूआरएल पर वापस या फिर इंडेक्स पेज पर रीडायरेक्ट करने में सक्षम होना चाहिए।

यदि आपके आवेदन में ऐसा मामला है तो इसका काफी सरल और साफ समाधान है।

हम लैरवेल redirect()->intented() फ़ंक्शन को elavating कर रहे हैं।

आपके GET फ़ंक्शन (उदा।getCreate) हम पिछले यूआरएल के लिए intented यूआरएल सेट कर रहे हैं, चाहे वह URL खुद के समान नहीं है:

($request->fullUrl() != URL::previous()) ? session()->set('url.intended', URL::previous()) : null; 
// url.intended is the same key that is used be Laravels intented function 

अब आप अपने POST विधि के भीतर (जैसे postCreate) तुम सिर्फ इरादा यूआरएल के लिए एक रीडायरेक्ट लौट सकते हैं इस तरह:

return redirect()->intended('[email protected]'); 
// The string within intended() defines where you want to be redirected if there is no session key is found