में प्रत्येक यूआरएल में एक उपसर्ग जोड़ना एक भाषा पैरामीटर की तरह केकेपीएचपी में प्रत्येक यूआरएल में उपसर्ग जोड़ने का सबसे साफ तरीका क्या है?केकेपीएचपी
http://example.com/en/controller/action
http://example.com/ru/admin/controller/action
यह admin
की तरह 'असली' उपसर्गों के साथ काम करने के लिए, और आदर्श रूप में नंगे यूआरएल /controller/action
/DEFAULT-LANGUAGE/controller/action
पर पुनः निर्देशित किया जा सकता है की जरूरत है।
यह अब मेरे लिए एक रेट्रो-फिट अनुप्रयोग में काम कर रहा है, लेकिन यह एक हैक था, और मुझे अधिकांश लिंक में हाथ से भाषा पैरामीटर शामिल करना होगा, जो अच्छा नहीं है।
तो सवाल दोहरा है:
- सबसे अच्छा तरीका मार्गों की संरचना करने के क्या है, इसलिए भाषा पैरामीटर परोक्ष प्रत्येक नव परिभाषित मार्ग के लिए निर्दिष्ट किया जा बिना डिफ़ॉल्ट रूप से शामिल है?
Router::connect('/:controller/:action/*', ...)
में उपसर्ग शामिल होना चाहिए।- पैरामीटर
$this->params['lang']
में उपलब्ध होना चाहिए याAppController::beforeFilter()
में कहीं भी मूल्यांकन किया जाना चाहिए।
- यूआरएल में उपसर्ग को स्वचालित रूप से निर्दिष्ट करने के लिए
Router::url()
कैसे प्राप्त करें, अगर स्पष्ट रूप से निर्दिष्ट नहीं किया गया है?Router::url(array('controller' => 'foo', 'action' => 'bar'))
/en/foo/bar
- लौटना चाहिए
Controller::redirect()
के बाद से,Form::create()
या यहाँ तक किRouter::url()
सीधे अधिभावी हर एक समारोह वास्तव में एक विकल्प नहीं है, एक ही व्यवहार की आवश्यकता है। उदाहरण के लिएHtml::image()
हालांकि उपसर्ग-कम यूआरएल उत्पन्न करना चाहिए।
निम्न विधियों Router::url
कॉल करने के लिए लग रहे हैं।
Controller::redirect
Controller::flash
Dispatcher::__extractParams
के माध्यम सेObject::requestAction
Helper::url
JsHelper::load_
JsHelper::redirect_
View::uuid
, लेकिन केवल एक हैश पीढ़ी के लिए
उनमें से बाहर ऐसा लगता है कि नियंत्रक और सहायक विधि को ओवरराइड करने की आवश्यकता होगी, मैं JsHelper
के बिना रह सकता हूं। मेरा विचार पैरामीटर सम्मिलन को संभालने के लिए AppController
या शायद bootstrap.php
में एक सामान्य फ़ंक्शन लिखना होगा। ओवरराइड कंट्रोलर और हेल्पर विधियां इस फ़ंक्शन का उपयोग करेंगी, जैसे कि मैं मैन्युअल रूप से Router::url
पर कॉल करना चाहता हूं। क्या यह पर्याप्त होगा?
और टिप्पणियों के अनुसार, अधिभावी 'AppController :: url' यह नियंत्रकों के लिए करना होगा। अब तक इतना अच्छा है, क्या कुछ और है? अन्य भागों को सीधे 'राउटर :: यूआरएल' कहते हैं? – deceze