2012-10-25 16 views
8

पर सबडोमेन रूटिंग कोई सफलता के साथ लंबे समय तक खोज करने के बाद। इससे पहले कि मैं छोड़ देना, मैं पूछना चाहूँगा:ज़ेंड फ्रेमवर्क 2 मॉड्यूल

वहाँ मार्ग के लिए एक रास्ता Zend फ्रेमवर्क 2 में एक मॉड्यूल के लिए एक उप डोमेन है? जैसे:

उपडोमेन =>मॉड्यूल
api.site.com => एपीआई
dev.site.com => देव
admin.site.com => व्यवस्थापक
site.com = > सार्वजनिक
...

मैंने इसे ऐसा करने की कोशिश की लेकिन मुझे डिफ़ॉल्ट (इंडेक्स) के अलावा नियंत्रकों तक पहुंच नहीं मिल सकती।

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Hostname', 
      'options' => array(
       'route' => 'site.com', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ) 
     ) 
    ), 
), 

मेरी मदद करने के लिए समय निकालने के लिए धन्यवाद।

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Hostname', 
      'options' => array(
       'route' => 'api.site.com', 
       'defaults' => array(
        '__NAMESPACE__' => 'Api\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ) 
     ) 
    ), 
), 

आदि, तो आप हर मॉड्यूल के लिए ऐसा चाहते हैं: यानी आपके उप डोमेन होस्ट करता है, परिभाषित करने के लिए - एक प्रति मॉड्यूल के आधार पर -

उत्तर

5

ज़ेंड फ्रेमवर्क 2 में मॉड्यूल के लिए रूटिंग की धारणा नहीं है; सभी रूटिंग मैपिंग एक यूआरआई पैटर्न (HTTP मार्गों के लिए) और एक विशिष्ट नियंत्रक वर्ग के बीच हैं। उस ने कहा, Zend\Mvc एक ईवेंट श्रोता (Zend\Mvc\ModuleRouteListener) प्रदान करता है जो आपको एक यूआरआई पैटर्न को परिभाषित करने की अनुमति देता है जो किसी दिए गए पैटर्न के आधार पर एकाधिक नियंत्रकों को मैप करता है, और इसलिए "मॉड्यूल रूटिंग" का अनुकरण करता है। हालांकि

'router' => array(
    'routes' => array(
     // This defines the hostname route which forms the base 
     // of each "child" route 
     'home' => array(
      'type' => 'Hostname', 
      'options' => array(
       'route' => 'site.com', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       // This Segment route captures the requested controller 
       // and action from the URI and, through ModuleRouteListener, 
       // selects the correct controller class to use 
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
          'controller' => 'Index', 
          'action'  => 'index', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

(Click here to see an example of this @ ZendSkeletonApplication)

इस समीकरण का केवल आधा है,: इस तरह के एक मार्ग को परिभाषित करने के लिए, आप अपने रूटिंग कॉन्फ़िगरेशन के रूप में इस जगह होगी। आपको एक विशिष्ट नामकरण प्रारूप का उपयोग करके अपने मॉड्यूल में प्रत्येक नियंत्रक वर्ग को भी पंजीकृत करना होगा। यह बात एक ही विन्यास फाइल के माध्यम से किया जाता है:

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController' 
    ), 
), 

सरणी कुंजी उर्फ ​​ModuleRouteListener सही नियंत्रक लगाने के लिए प्रयोग करेंगे है, और यह निम्नलिखित प्रारूप में होना चाहिए:

<Namespace>\<Controller>\<Action> 

मूल्य इस सरणी कुंजी को असाइन किया गया नियंत्रक वर्ग का पूर्ण-योग्य नाम है।

(Click here to see an example of this @ ZendSkeletonApplication)

नोट: यदि आप ZendSkeletonApplication उपयोग नहीं कर रहे हैं, या यह डिफ़ॉल्ट आवेदन मॉड्यूल है निकाल दिया है, आप अपने खुद के मॉड्यूल में से एक में ModuleRouteListener रजिस्टर करने के लिए की आवश्यकता होगी। Click here to see an example of how ZendSkeletonApplication registers this listener

+2

स्पष्टीकरण स्पष्ट और सटीक के लिए बहुत बहुत धन्यवाद। मैंने आपका समाधान लिया। मैंने इस पर बहुत संघर्ष किया। – Sapher

+0

वह बहुत अच्छा था, धन्यवाद। – cr125rider

+0

मैं मैंप समर्थक का उपयोग करता हूं और मैं अपने वर्चुअल होस्ट नाम पर सबडोमेन बना देता हूं ताकि मैं reseller.myhost.com/test का उपयोग करने के बाद यह ओकी हो लेकिन अगर मैं reseller.myhost लिखूं।कॉम यह एप्लिकेशन के सूचकांक में जाता है मेरे मॉड्यूल –

4

तो मुझे समझ DASPRIDS Rounter Presentation की # 39 सही ढंग से स्लाइड, यह के रूप में सरल है अपने दम पर।

+0

क्षमा करें अगर यह गूंगा लगता है लेकिन क्या आपको एपीआई सबडोमेन के लिए नया वेबसर्वर वर्चुअल होस्ट पंजीकृत करना है? –

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