2013-02-25 3 views
1

Я отчаянно боролся с ZF2, я пытаюсь создать дерево маршрутов, так что:Zend Framework 2 Детского Regex Routing

  • /ручной - переход к ручному контроллеру, индекс действия
  • /руководство/[что-то] - переходит к ручному контроллеру, действие производителя
  • /manual/[something]/[else] - переходит к ручному контроллеру, действие категории
  • /manual/[something]/[else]/[foo] - Переход к ручному контроллеру, действие модели

Я использовал официальные документы и несколько других сайтов, но все, что я мог сделать, это триггер:

  • /ручным - переход к ручному контроллеру, индекс действия
  • /ручной/[что-то] - переход к ручному контроллеру конструктора, но не действие ...

Других два Dont достичь контроллера вообще ....

 'manual' => array(
      'type' => 'literal', 
      'options' => array(
       'route' => '/manual', 
       'defaults' => array(
        'controller' => 'Applicaton\Controller\Manual', 
        'action' => 'index' 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       // Segment route for viewing one blog post 
       'manufacturer' => array(
        'type' => 'segment', 
        'options' => array(
         'route' => '/[:manufacturer]', 
         'constraints' => array(
          'manufacturer' => '[a-zA-Z0-9_-]+' 
         ), 
         'defaults' => array(
          'action' => 'manufacturer' 
         ) 
        ), 
        'may_terminate' => true, 
        'child_routes' => array(
         'category' => array(
          'type' => 'segment', 
          'options' => array(
           'route' => '/[:category]', 
           'constraints' => array(
            'category' => '[a-zA-Z0-9_-]+' 
           ), 
           'defaults' => array(
            'action' => 'category' 
           ) 
          ), 
          'may_terminate' => true, 
          'child_routes' => array(
           'model' => array(
            'type' => 'segment', 
            'options' => array(
             'route' => '/[:model]', 
             'constraints' => array(
              'model' => '[a-zA-Z0-9_-]+' 
             ), 
             'defaults' => array(
              'action' => 'model' 
             ) 
            ) 
           ) 
          ) 
         ) 
        ) 
       ) 
      ) 
     ), 

Спасибо за вашу помощь заранее, любая помощь будет принята с благодарностью!

Update:

Вот мой контроллер действия:

public function manufacturerAction() { 
    echo 'I am in the manufacturer action!'; 
    return new ViewModel(); 
} 

ответ

2

Это может быть сделано с помощью регулярных выражений. Измените ваши маршруты в module.config.php следующим

'manual' => array(
    'type' => 'Literal', 
    'options' => array(
     'route' => '/manual', 
     'defaults' => array(
      'controller' => 'Application\Controller\Manual', 
      'action' => 'index', 
     ), 
    ), 
), 
'manufacturer' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex', 
    'options' => array(
     'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)', 
     'defaults' => array(
      'controller' => 'Application\Controller\Manual', 
      'action' => 'manufacturer', 
     ), 
     'spec' => '/manual/%manufacturer%', 
    ), 
), 
'category' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex', 
    'options' => array(
     'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)/(?<category>[a-zA-Z0-9_-]+)', 
     'defaults' => array(
      'controller' => 'Application\Controller\Manual', 
      'action' => 'category', 
     ), 
     'spec' => '/manual/%manufacturer%/%category%', 
    ), 
), 
'model' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex', 
    'options' => array(
     'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)/(?<category>[a-zA-Z0-9_-]+)/(?<model>[a-zA-Z0-9_-]+)', 
     'defaults' => array(
      'controller' => 'Application\Controller\Manual', 
      'action' => 'model', 
     ), 
     'spec' => '/manual/%manufacturer%/%category%/%model%', 
    ), 
), 
+0

Привет Финни, Это работает почти идеально, за исключением «производителя» маршрут не работает, это делает его к контроллеру, но его не удалось отправить вам посылку запрос. Я добавил действие контроллера выше, но его довольно стандартный ... – Ben

+0

Привет, Бен, Можете ли вы указать некоторые особенности проблемы, которые у вас есть; как URL-адрес, к которому вы пытаетесь получить доступ, и ваш обновленный маршрут? –

+0

Привет, Финни, мой обновленный маршрут точно такой же, как у вас. Мой URL-адрес будет http: //v2.mydomain/manual/nikon, не имеет значения, что я помещал в последнюю часть URL-адреса, которое он достигает «действия производителя» ... – Ben