2010-11-10 11 views
5

मैं Zend में मार्ग केवल वर्तमान लाइव साइट यूआरएल संरचना जो दुर्भाग्य से असंगतकैसे Zend रूटर होस्ट नाम के साथ मार्ग बहु उपडोमेन

क्या मैं करना चाहता हूँ इस प्रकार मार्ग उप डोमेन में है कॉपी करने के लिए बनाने की जरूरत करने के लिए:

www.site.com -> स्थिर रूटर

a.site.com & b.site.com -> श्रेणी नियंत्रक

c.site.com & d.site.com -> स्थान नियंत्रक

शेष उप डोमेन -> उपयोगकर्ता नियंत्रक

कोई भी मुझे यह हल करने के लिए मार्गदर्शन कर सकता है, धन्यवाद।

अद्यतन:

पहले धन्यवाद Fge, आपका जवाब वोट, यह काम करता है, लेकिन मैं कुछ और सलाह की जरूरत:

  1. के बाद से मैं प्रत्येक नियम के लिए कई उप डोमेन में है वहाँ एक बेहतर तरीका से जोड़ने है पाशन

    foreach ($ $ के रूप में उप डोमेन एक) { $ टीआर = नए Zend_Controller_Router_Route_Hostname में नियम ( "$ a.site.com", सरणी ( 'मॉड्यूल' => 'मो डी ', ' नियंत्रक '=>' ctrl ', ' param_1 '=> $ ); $ राउटर-> addRoute ($ a, $ tr); }

  2. कैसे मानकों (श्रृंखलित?) पार्स करने के लिए अन्य मार्ग प्रकार, http://a.site.com/:b/:c की तरह कुछ के साथ गठबंधन करने के लिए, मैं टी पार्स यह param_1 (क), param_2 (ख), param_2 (ग)

  3. चाहते
+0

क्षमा करें, ऐसा लगता है कि कोड स्वरूपित काम नहीं करता है? – Komang

उत्तर

6

नोट: मिलान
मार्गों उलटे क्रम में मिलान किया जाता है तो अपने सबसे सामान्य मार्गों पहले परिभाषित कर रहे हैं सुनिश्चित करें कि रिवर्स।

(Zend_Controller_Router)

इस प्रकार आप पहले अन्य सभी उप डोमेन के लिए मार्ग को परिभाषित करने के लिए है, तो विशिष्ट लोगों को: अद्यतन प्रश्न के लिए

$user = new Zend_Controller_Router_Route_Hostname(
    ':subdomain.site.com', 
    array(
     'controller' => 'user' 
    ) 
); 
$location1 = new Zend_Controller_Router_Route_Hostname(
    'c.site.com', 
    array(
     'controller' => 'location' 
    ) 
); 
$location1 = new Zend_Controller_Router_Route_Hostname(
    'd.site.com', 
    array(
     'controller' => 'location' 
    ) 
); 
// other definitions with known subdomain 
$router->addRoute($user); // most general one added first 
$router->addRoute($location1); 
$router->addRoute($location2); 
// add all other subdomains 

अद्यतन:
1) यह वास्तव में इस बात पर निर्भर करता है कि पैरामीटर आप सबडोमेन को कितना अलग करना चाहते हैं। आपके उदाहरण में आपने उन्हें सभी को एक ही मॉडल और नियंत्रक के पास भेज दिया और वास्तविक सबडोमेन को पैरामीटर के रूप में जोड़ा। यह ऊपर पोस्ट किए गए उपयोगकर्ता-मार्ग के साथ आसानी से किया जा सकता है। वहां सबडोमेन पैरामीटर सबडोमेन ($request->getParam("subdomain")) के रूप में सेट किया गया है। यदि आप चाहते हैं कि सबडोमेन एक ज्ञात नियंत्रक/मॉडल की कार्रवाई हो, तो आप :subdomain को :action से प्रतिस्थापित कर सकते हैं। लेकिन जैसे ही आपके पास प्रत्येक सबडोमेन के लिए अन्य नियंत्रक/मॉडल होते हैं, मुझे डर है कि आपको उन पर लूप करना होगा (या कॉन्फ़िगरेशन फ़ाइल का उपयोग करें)।जब तक

$user = new Zend_Controller_Router_Route_Hostname(
    ':param1.site.com', 
    array(
     'controller' => 'user' 
    ) 
); 
// routes "subdomain".site.com to defaultModul/userController/indexAction with additional parameter param1 => subdomain. 

के रूप में आप एक सामान्य तरीके से उन्हें रूट करने के लिए अपने उप डोमेन में किसी भी स्कीमा यह बहुत मुश्किल है की जरूरत नहीं है: उदाहरण के लिए आप विचाराधीन प्रदान की के लिए, मार्ग बस ऐसा दिखाई दे सकता।

2) यह एक उदाहरण है जहां router chains खेल में आते हैं। बाहरी मार्ग होस्टनाम मार्ग होगा जो सबडोमेन को संभालता है और आंतरिक मार्ग :a/:b भाग को संभाल लेगा। यह उदाहरण के लिए ऐसा दिखाई दे सकता है:

$user->chain(new Zend_Controller_Router_Route(':a/:b')); 
+0

धन्यवाद, यह काम करता है, आपका जवाब वोट दिया लेकिन कृपया ऊपर मेरे अपडेट पर एक नज़र डालें। – Komang

+0

@ariel अद्यतन उत्तर। – Fge

+0

चट्टानों मैंने इसे बनाया, धन्यवाद – Komang