2012-11-24 23 views
9

मैं ZF2 राउटर कॉन्फ़िगरेशन के साथ कुछ मदद ढूंढ रहा हूं।ज़ेंड फ्रेमवर्क 2: राउटर "अमान्य नियंत्रक वर्ग या उपनाम का हल करता है:"

मैं विकास संदर्भ में एक ही मॉड्यूल में एकाधिक नियंत्रक जोड़ना चाहता हूं, हालांकि अंततः यह पता लगाना होगा कि विशिष्ट मार्गों को कैसे निर्दिष्ट किया जाए।

ऐसा करने के लिए मैं वर्तमान में एमवीसी त्वरित प्रारंभ दस्तावेज में निर्दिष्ट सामान्य उद्देश्य मॉड्यूल.कॉन्फिग का उपयोग करने की कोशिश कर रहा हूं। हालांकि ऐसा लगता है कि जेडएफ 2 दस्तावेज सुझाव देगा।

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.quick-start.html

प्रलेखन नोट:

डिफ़ॉल्ट मार्ग "एक साथ ZendSkeletonApplication जहाजों" "। संभावना है कि इस कार्रवाई के लिए आप मिल जाएगा कि मार्ग मूल रूप से उम्मीद "/{मॉड्यूल}/{ नियंत्रक}/{action} ", जो आपको यह निर्दिष्ट करने की अनुमति देता है: "/zend-user/hello/world "। हम चित्रण उद्देश्यों के लिए मुख्य रूप से पर एक मार्ग बनाने जा रहे हैं, क्योंकि स्पष्ट मार्ग बनाने के लिए अनुशंसित है अभ्यास। "

हालांकि, नियंत्रक renders/मकान मालिक, /मकान मालिक/घर/सूचकांक, लेकिन नहीं/मकान मालिक/सैंडबॉक्स/सूचकांक। घर और सैंडबॉक्स नियंत्रक हैं। सैंडबॉक्स नामकरण सम्मेलन "सैंडबॉक्स नियंत्रक" के साथ नामित किया गया है। मेरा लेना यह है कि दस्तावेज़ीकरण में कोड के बच्चे के अंक अनुभाग में कुछ प्रकार की संशोधन की आवश्यकता है जिसे मैंने याद किया है।

सैंडबॉक्स उदाहरण में मुझे 404 त्रुटि पृष्ठ पर यह त्रुटि मिलती है।

मैं जोड़ने 'मकान मालिक \ नियंत्रक \ सैंडबॉक्स' => 'मकान मालिक \ की कोशिश की:

मकान मालिक \ नियंत्रक \ सैंडबॉक्स (मकान मालिक \ नियंत्रक \ सैंडबॉक्स नियंत्रक वर्ग या उर्फ ​​अमान्य निराकरण) नियंत्रक \ SandboxController ', invokables के लिए, लेकिन यह एक त्रुटि बनाता है।

मेरे नियंत्रक नीचे सूचीबद्ध है:

return array(
'controllers' => array(
    'invokables' => array(
     'Landlord\Controller\Home' => 'Landlord\Controller\HomeController', 

    ), 
), 
'router' => array(
    'routes' => array(
     'landlord' => array(
      'type' => 'Literal', 
      'options' => array(
       // Change this to something specific to your module 
       'route' => '/landlord', 
       'defaults' => array(
        // Change this value to reflect the namespace in which 
        // the controllers for your module are found 
        '__NAMESPACE__' => 'Landlord\Controller', 
        'controller' => 'home', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       // This route is a sane default when developing a module; 
       // as you solidify the routes for your module, however, 
       // you may want to remove it and replace it with more 
       // specific routes. 
       '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(
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 
'view_manager' => array(
    'template_path_stack' => array(
     'landlord' => __DIR__ . '/../view', 
    ), 
), 
); 

अगर वहाँ सीधे यूआरएल कॉन्फ़िगर करने के लिए एक आसान तरीका है, यह भी उपयोगी होगा, या एक बहुत अच्छी ट्यूटोरियल यह भी सराहना की जाएगी।

उत्तर

21

समस्या यह है कि राउटर आपके नए नियंत्रक को रूट करने का प्रयास करेगा, भले ही आपने जो भी जोड़ा है, आपको अभी भी आपके द्वारा जोड़े गए प्रत्येक नियंत्रक के लिए आमंत्रण योग्य भाग जोड़ने की आवश्यकता है। तो अपने रूटर इस बिंदु पर ठीक हो गया लगता है, लेकिन यदि आप उदाहरण के लिए जोड़ने के लिए एक नया AboutController तो तुम इतनी तरह अपने config के शीर्ष को संशोधित करने की आवश्यकता होगी ...

return array(
'controllers' => array(
    'invokables' => array(
     'Landlord\Controller\Home' => 'Landlord\Controller\HomeController', 
     'Landlord\Controller\About' => 'Landlord\Controller\AboutController', 
    ), 
), 
3

बस लगता है इस सवाल का जवाब ... पोस्टिंग यहां, यह किसी एक की मदद कर सकता है ... मुझे लगता है कि आपने zf2 दस्तावेज़ों द्वारा प्रदान किए गए एल्बम मॉड्यूल के उदाहरण का पालन किया है, और अब मेरे मॉड्यूल 'एडमिन' जैसे नए मॉड्यूल जोड़ रहे हैं और मैं व्यवस्थापक, समाचार इत्यादि जैसे नए नियंत्रक जोड़ता हूं। ,

यहां राउटर सेटिंग्स है ...

'router' => array(
     'routes' => array(
      'admin' => array(
       'type' => 'segment', 
       'options' => array(
        'route' => '/admin/admin[/:action][/:id]', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
         'id' => '[0-9]+', 
        ), 
        'defaults' => array(
         'controller' => 'Admin\Controller\Admin', 
         'action' => 'index', 
        ), 
       ), 

      ), 
      'news' => array(
       'type' => 'segment', 
       'options' => array(
        'route' => '/admin/news[/:action][/:id]', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
         'id' => '[0-9]+', 
        ), 
        'defaults' => array(
         'controller' => 'Admin\Controller\News', 
         'action' => 'index', 
        ), 
       ), 

      ), 
     ), 
    ), 

और यहाँ अपने नियंत्रक ..

'controllers' => array(
     'invokables' => array(
      'Admin\Controller\News' => 'Admin\Controller\NewsController', 
      'Admin\Controller\Admin' => 'Admin\Controller\AdminController', 

     ), 
    ), 

अब आप अपने नियंत्रकों के साथ अपने मॉड्यूल में, यहाँ की तरह मेरे मामले में कॉल कर सकते हैं

localhost/{foldername}/admin/news/index and localhost/{foldername}/admin/admin/index 

धन्यवाद

1

मैं जोड़ने उसी मामले में, मुझे पिछली पोस्ट के रूप में एक समाधान मिला, लेकिन मुझे लगता है कि यह बेहतर तरीका नहीं है।

मेरी routeur अंदर ले "clientController" जोड़ने के लिए:

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Fcm\Controller\Index', 
        'action' => 'index', 
       ), 
      ), 
     ), 
     'client' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/client[/:action][/:id]', 
       'constraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id' => '[0-9]+', 
       ), 
       'defaults' => array(
        'controller' => 'Fcm\Controller\Client', 
        'action' => 'index', 
       ), 
      ), 
     ), 
    ), 
), 
0

कॉन्फ़िगर इस तरह मार्ग: -
मॉड्यूल: - उपयोगकर्ता
नियंत्रक: - IndexController

'router' => array(
     'routes' => array(
      'users' => array(
       'type' => 'Literal', 
       'options' => array(
        // Change this to something specific toyour module 
        'route' => '/users', 
        'defaults' => array(
           // Change this value to reflect the namespace in which 
         // the controllers for your module are found 
         '__NAMESPACE__' => 'Users\Controller', 
         'controller' => 'Index', 
         'action' => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => 
          '/[:controller[/:action][/:id]]', 
          'constraints' => array(
           'controller' =>'[a-zA-Z][a-zA-Z0-9_-]*', 
           'action' =>'[a-zA-Z][a-zA-Z0-9_-]*', 
           'id' =>'[0-9]+', 
          ), 
          'defaults' => array(
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ),