2014-05-13 10 views
6

मैं लार्वेल के लिए नया हूं और मैं वास्तव में कई वैकल्पिक यूआरएल पैरामीटर को पारित करने के तरीके को समझने के लिए संघर्ष कर रहा हूं।लैरवेल 4: एकाधिक वैकल्पिक पैरामीटर कैसे पास करें

नियंत्रक को 3 वैकल्पिक पैरामीटर पास करते समय मार्गों को कोड करने का मानक तरीका क्या है?

नामित पैरामीटर को नियंत्रक को पास करने की अनुमति देने के लिए मार्ग को कोड करने का कोई तरीका भी है?

ऐसे

रूप
public/test/id=1&page=2&opt=1 
or 
public/test/id=1/page=2/opt=1 

किसी भी मदद

+1

आईडी = 1 & पेज = 2 & ऑप्ट = 1 क्लासिक, सर्वर के लिए मानकों को प्रसारित करने के पुराने तरीका है; आईडी/1/पेज/2/ऑप्ट/1 नया, ढांचा तरीका है। –

+0

एंड्रयू इस तकनीक का नाम क्या है? धन्यवाद – clarenswd

उत्तर

7

आप एक से अधिक वैकल्पिक पैरामीटर

Route::get('test',array('as'=>'test','uses'=>'[email protected]')); 

और अपने नियंत्रक के अंदर है, तो

class HomeController extends BaseController { 
    public function index() 
    { 
     // for example public/test/id=1&page=2&opt=1 
     if(Input::has('id')) 
      echo Input::get('id'); // print 1 
     if(Input::has('page')) 
      echo Input::get('page'); // print 2 
     //... 
    } 
} 
6

नाम मापदंडों आमतौर पर मार्ग सेगमेंट के रूप में लेकिन स्पष्ट नामकरण के बिना किया जाता है के लिए धन्यवाद। उदाहरण के लिए आप कर सकते थे ओ कुछ इस तरह:

Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) { 
    // do something 
}); 

$id, $page और $opt सभी वैकल्पिक यहाँ के रूप में खंड परिभाषाओं में ? द्वारा परिभाषित किया गया है, और वास्तव में वे समारोह में मूलभूत मूल्यों होती है। हालांकि, अगर आप यहाँ किसी समस्या के कुछ पर ध्यान देंगे:

  1. वे सही क्रम
  2. केवल $opt वास्तव में वैकल्पिक, $page अगर $opt है प्रदान की जानी चाहिए है में URL में प्रदर्शित करने के लिए है, और $id चाहिए अगर $page

यह एक सीमा है जिस तरह से लार्वाले नामित सेगमेंट को कार्य/विधि पैरामीटर पर मानचित्रित करता है। आप सैद्धांतिक रूप से यह काम करने के लिए अपने स्वयं के तर्क को लागू कर सकता है, हालांकि:

Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) { 
    if ($first) { 
     list($name, $value) = @explode('=', $first, 2); 
     $$name = $value; 
    } 
    if ($second) { 
     list($name, $value) = @explode('=', $second, 2); 
     $$name = $value; 
    } 
    if ($third) { 
     list($name, $value) = @explode('=', $third, 2); 
     $$name = $value; 
    } 

    // you should now have $id, $page and $opt defined if they were specified in the segments 
}); 

ऐसा नहीं है कि यह एक बहुत ही भोली समाधान है, = द्वारा अंधा विस्फोट पर निर्भर के साथ ही एक मनमाने ढंग से-inputted वैरिएबल का नाम स्थापित करने (जो स्पष्ट रूप से परेशानी के लिए पूछ रहा है)। आपको इस कोड में और अधिक जांच जोड़नी चाहिए, लेकिन यह आपको उपरोक्त दो समस्याओं को प्राप्त करने का विचार देनी चाहिए।

यह शायद ध्यान दिया जाना चाहिए कि इस थोड़े, 'सही तरीके से' मार्ग और Laravel में यूआरआई करने के लिए के खिलाफ जा रहा है तो जब तक आप वास्तव में इस कार्यक्षमता की जरूरत है, आप जिस तरह से आप एक करने के लिए इन यूआरआई बन रहे हैं पर पुनर्विचार करना चाहिए जिस तरह से लार्वा ढांचे के लिए अधिक सेट अप है।

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