1

Я хочу настроить приложение Zf2 таким образом, чтобы несколько строк направлялись на один и тот же контроллер. Например, www.mysite.com/this и www.mysite.com/, и оба маршрута к одному и тому же контроллеру и имеют доступ к этому и тому, что можно захватить с помощью $ this-> params. Как я мог бы сделать что-то подобное? Мне понадобится 2 отдельных объявления маршрута?ZF2 Проложить несколько строк к одному контроллеру?

'directory' => [ 
    'type'  => 'Zend\Mvc\Router\Http\Literal', 
    'options' => [ 
      'route'  => '/string1 || /string2 || /string3', 
      'defaults' => [ 
       'controller' => 'Application\Controller\MyController', 
       'action'  => 'index' 
      ], 
     ], 
] 
+1

сделать два отдельных маршрута, как вы упомянули – STLMikey

ответ

0

По определению Literal route создать 3 маршрута:

'directory1' => [ 
    'type'  => 'Zend\Mvc\Router\Http\Literal', 
    'options' => [ 
      'route'  => '/string1', 
      'defaults' => [ 
       'controller' => 'Application\Controller\MyController', 
       'action'  => 'index', 
      ], 
     ], 
], 
'directory2' => [ 
    'type'  => 'Zend\Mvc\Router\Http\Literal', 
    'options' => [ 
      'route'  => '/string2', 
      'defaults' => [ 
       'controller' => 'Application\Controller\MyController', 
       'action'  => 'index', 
      ], 
     ], 
], 
'directory3' => [ 
    'type'  => 'Zend\Mvc\Router\Http\Literal', 
    'options' => [ 
      'route'  => '/string3', 
      'defaults' => [ 
       'controller' => 'Application\Controller\MyController', 
       'action'  => 'index', 
      ], 
     ], 
], 
1

Вы можете использовать тип Zend\Mvc\Router\Http\Regex маршрута, вместо буквальной и сделать что-то вроде

'directory' => [ 
    'type'  => 'Zend\Mvc\Router\Http\Regex', 
    'options' => [ 
     'route'  => '/string(?<id>[0-9]+)', 
     'defaults' => [ 
      'controller' => 'Application\Controller\MyController', 
      'action'  => 'index' 
     ], 
    ], 
] 
2

самого простого решения ИМО , составляет:

 'varcatcher' => [ 
      'type' => 'Segment', 
      'options' => [ 
       'route' => '[/[:tail]]', 
       'defaults' => [ 
        'controller' => '\Application\Controller\Index', 
        'action' => 'catch', 
        'module' => 'Application', 
       ], 
       'constraints' => [ 
        'tail' => '[a-zA-z0-9_-]*' 
       ], 
      ], 
      'may_terminate' => true, 
     ], 

Тогда дело с этим в своем действии:

public function catchAction(){ 
    die($this->params()->fromRoute('tail')); 
} 

Поскольку ZF2 маршруты LIFO. Вероятно, оптимально иметь дело с этим, вставив его в первую очередь и обрабатывая любые случаи, которые вам нужно «ловить».

Упоминание о LIFO заключается в том, что если вы определяете маршруты «после» в массиве маршрутизаторов, они будут предшествовать catch-all, что, похоже, принесет пользу, если я правильно прочитал ваш вопрос.

Cheers! Alex

Смежные вопросы