2012-10-03 23 views
6

मुझे ऐसे मार्ग में वैकल्पिक बाधा के साथ कोई समस्या है जो इसके बच्चों में गैर-वैकल्पिक है। मेरे मार्ग संरचना इस प्रकार है:बच्चों के मार्गों में ZF2 वैकल्पिक मार्ग बाधाएं

'profile' => [ 
    'type' => 'segment', 
    'options' => [ 
     'route' => '/profile[/:id]', 
     'constraints' => ['id' => '[0-9]*'], 
     'defaults' => [ 
      'controller' => 'User\Controller\User', 
      'action' => 'profile' 
     ] 
    ], 
    'may_terminate' => true, 
    'child_routes' => [ 
     'sessions' => [ 
      'type' => 'literal', 
      'options' => [ 
       'route' => '/sessions', 
       'defaults' => ['action' => 'sessions'] 
      ] 
     ] 
    ] 
] 

मेरे मन को कौन सा मुझे देना चाहिए निम्नलिखित मार्गों:

  1. /profile - काम करता है
  2. /profile/123 - काम करता है
  3. /profile/sessions - काम नहीं करता है
  4. /profile/123/sessions - काम करता है

जब मैं मैं निम्नलिखित त्रुटि मिलती है URL दृश्य सहायक में मार्ग 3 का उपयोग करें:

$this->url('profile/sessions'); 

Zend\Mvc\Router\Exception\InvalidArgumentException : Missing parameter "id"

मैं मूल रूप से मेरे बाधा के रूप में [0-9]+ लेकिन जो इसे वैकल्पिक (*) प्रतीत नहीं होता था मदद की है। क्या किसी ने पहले इस मामले का अनुभव किया है?

उत्तर

3

मेरे पास एक ही समस्या थी, मुझे मिला एकमात्र समाधान एक अलग मार्ग (बेस/केस/सत्रों के लिए आपके मामले में) के लिए मूल मार्ग के वैकल्पिक पैरामीटर के रूप में बनाना था, एक बच्चे मार्ग तक पहुंचने पर अनिवार्य प्रतीत होता है ।

+2

मैंने इस मार्ग को समाप्त कर दिया क्योंकि मैं प्रत्येक मार्ग को स्पष्ट रूप से परिभाषित करना पसंद करता हूं (मैं 'जादुई'/नियंत्रक [/: कार्रवाई] 'स्टाइल मार्गों को नापसंद करता हूं)। – Ross

8

इसे अपने मूल मार्ग में जोड़ें।

'profile' => [ 
    'type' => 'segment', 
    'options' => [     // ↓ 
     'route' => '/profile[/:id][/:action]', 
     'constraints' => [ 'id' => '[0-9]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*' ], 
     'defaults' => [ 
      'controller' => 'User\Controller\User', 
      'action' => 'profile', 
     ], 
    ], 
] 

यह वैकल्पिक id और/या action के लिए कर देगा। कम से कम सिद्धांत में इसे आपके सभी सूचीबद्ध मार्गों को संभव बनाना चाहिए, इसके साथ some issues रहा है।