2010-06-30 13 views
14

में सच बनाम 'उपसर्ग' => व्यवस्थापक हाय मैं केकेपीएचपी में व्यवस्थापक रूटिंग स्थापित कर रहा हूं।रूटिंग: 'व्यवस्थापक' => केकपीएचपी

यह मेरे वर्तमान मार्ग है:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home')); 

यह ठीक काम करता है, लेकिन मुझे समझ नहीं आता क्या 'व्यवस्थापक' => true, और 'उपसर्ग' => 'व्यवस्थापक' के बीच का अंतर है।

जब मैंने 'prefix' => 'admin' छोड़ा, राउटर admin_index का उपयोग नहीं करेगा और इसके बजाय बस index का उपयोग करेगा। तो 'admin' => true का बिंदु क्या है?

उत्तर

26

'prefix' => 'admin' सेट करके आप केकेपीएचपी को बता रहे हैं कि आप उस मार्ग के लिए admin के उपसर्ग का उपयोग करना चाहते हैं; मूल रूप से अर्थ है कि आप नियंत्रक क्रियाओं और विचारों का उपयोग करना चाहते हैं जिनके नाम admin_ के साथ उपसर्ग हैं। इस भाग के बारे में आप पहले से ही जानते हैं, और चीजें शायद इस के साथ ठीक काम करेंगे।

हालांकि जब मार्गों का निर्माण, किसी भी सरणी दूसरा तर्क में पारित कर दिया चाबियाँ कि CakePHP द्वारा मान्यता प्राप्त नहीं कर रहे हैं (यानी। नहीं आपके सामान्य controller, action, plugin, prefix सामान) उस मार्ग मिलान अनुरोधों के दौरान नामित पैरामीटर के रूप में स्थापित कर रहे हैं।

'admin' => true जोड़ना इसलिए इस मामले में सिर्फ एक नामित पैरामीटर है, लेकिन यह इसके फायदे के साथ आता है। सबसे पहले, यह कोड को और अधिक संक्षिप्त बना सकता है।

/* Determine if a request came through admin routing */ 
// without: 
if ($this->params['prefix'] == 'admin') {} 
// with: 
if ($this->params['admin']) {} 

/* Create a link that is reverse-routed to an admin prefixed route */ 
// without: 
$html->link('...', array('prefix' => 'admin', 'controller' => 'users')); 
// with: 
$html->link('...', array('admin' => true, 'controller' => 'users')); 

दूसरे, यह रास्ता व्यवस्थापक रूटिंग के साथ पश्च संगतता CakePHP 1.2 में काम प्रदान करता है (ऊपर के उदाहरण से अंतिम पंक्ति है कि कैसे आप 1.2 में व्यवस्थापक मार्ग लिंक करती ही)। इसलिए, 1.2 से 1.3 तक माइग्रेट करने वाले डेवलपर 'admin' => true अपने मार्गों में ध्वज रखकर ('prefix' => 'admin' एक जोड़कर) अपने पूरे एप्लिकेशन में लिंक बदलना बंद कर सकते हैं।

आखिरकार, नामित पैरामीटर के साथ इस तरह का एक कस्टम ध्वज सेट करके और अपने एप्लिकेशन में सटीक स्ट्रिंग द्वारा अपने मार्ग का संदर्भ देने के बजाए इसका उपयोग करके इसका मतलब है कि यदि आप किसी उपसर्ग को बदलते हैं तो आप कभी भी लिंक को बदलने से रोकते हैं अन्यथा (admin से administrator या edit) से कहें ... हालांकि यह एक महत्वपूर्ण बिंदु है, क्योंकि आपको अपने सभी admin_* नियंत्रक कार्यों और विचारों का नाम बदलने की आवश्यकता होगी। :)

+0

धन्यवाद, मुझे केवल – Rob

4
// Go into a prefixed route. 
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add')); 

// leave a prefix 
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5)); 
+3

की आवश्यकता है 1.3 में, लिंक में उपसर्ग को संभालने का यह सही तरीका है। मेरे पास व्यवस्थापक और क्यूरेटर उपसर्ग हैं। बस 'क्यूरेटर' => सच या 'व्यवस्थापक' => सच करें। 'उपसर्ग' => 'क्यूरेटर' जोड़ना कुछ भी नहीं करता है। – Walker

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