ZendFramework2 маршрутизация между модулями

У меня установлено приложение SkeletonApplication, и некоторые контроллеры встроены в стандартный модуль «Приложение».

Это отлично работает.

Но теперь я хочу использовать второй модуль и установить маршрут из модуля Application в новый модуль, чтобы связать его там в представлении.

Второй модуль называется «Sporttabs».

В моем файле application.config.php я установил, как показано в документации:

 // This should be an array of module namespaces used in the application.
'modules' => array(
'Application',
'Sporttabs'

),

В модуле «Приложение» я установил в module.config.php:

'routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route'    => '/',
'defaults' => array(
'module'    => 'Application',
'controller' => 'Index',
'action'     => 'index',
),
),
),

'fach' => array(
'type'    => 'segment',
'options' => array(
'route'    => '/index[/: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(
'controller' => 'Index',
'action'     => 'index'
),
),
),

'sporttabs' => array(
'type'    => 'segment',
'options' => array(
'route'    => '/sporttabs[/: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(
'module' => 'Sporttabs',
'controller' => 'Sporttab',
'action'     => 'index'
),
),
),



),

),

Я попытался связать его в index.phtml:

<a href="<?php echo $this->url('sporttabs',array('module' => 'sporttabs','controller' => 'sporttab','action' => 'index'))?>">Sporttabs-Projekt</a>

Это не работает, я только получаю / sporttab

Даже если я попытаюсь сделать www.myurl.de/sporttabs, я не попаду в модуль Sporttabs …
(Я использую ZendStudio для создания модуля ne, поэтому я думаю, что все файлы находятся в правильном положении …)

Можете ли вы дать мне подсказку, как это сделать?

0

Решение

Нет необходимости определять спортивные вкладки в конфигурации вашего приложения. Я предлагаю вам сделать это в файле module.config.php вашего Sporttabs.

Это пример моего /admin маршрут, который является другим модулем с именем Admin, которые сидят рядом с приложением.

'router' => [
'routes' => [
'admin' => [
'type'    => 'Literal',
'options' => [
'route' => '/admin',
'defaults' => [
'__NAMESPACE__' => 'Admin\Controller',
'controller'    => 'Index',
'action'        => 'index',
],
],
'may_terminate' => true,
'child_routes' => [
'default' => [
'type'    => 'Segment',
'options' => [
'route'    => '/[:controller[/][:action[/][:id][/page/:page][/search/:search]]]',
'constraints' => [
'controller' => '[a-zA-Z0-9_-]*',
'action'     => '[a-zA-Z0-9_-]*',
'search'     => '[a-zA-Z0-9_-]*',
'id'         => '[0-9]+',
'page'       => '[0-9]+',
],
'defaults' => [
'__NAMESPACE__' => 'Admin\Controller',
'controller'    => 'Index',
'action'        => 'index',
],
],
],
],
],
],
],

Оттуда я делаю это:

<?=$this->url("admin/default", ['controller' => "controler_name", "action" => "action_name_from_controller", "id" => id_or_something_else_if_needed])?>

/default существует для того, чтобы иметь доступ к дочерним маршрутам.

0

Другие решения

@ Stanimir дает правильную подсказку для моего решения:

При редактировании маршрутизации для моего приложения я должен был непреднамеренно изменить порядок массива маршрутов:
Разделы ‘may_terminate’ и ‘child_routes’ перемещены на верхний уровень, а не являются частью маршрута ‘fach’.

Поэтому я изменил массив следующим образом:

'routes'=> array(

'fach'=> array(
'type'      => 'Literal',
'options'   => array(
'route'     => '/',
'defaults'  => array(
'__NAMESPACE__' => 'Application\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(
'__NAMESPACE__' => 'Application\Controller',
'controller'    => 'Index',
'action'        => 'index',
),
),
),
),
),),

В результате включения пространства имен в маршрутизацию мне также пришлось изменить массив контроллеров, поскольку псевдоним контроллера изменился с «Индекс» на «Приложение \ Контроллер \ Индекс»:

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

),
),

Из-за этой же ошибки я не смог попасть во второй модуль, массив маршрутов тоже был неупорядочен.

Теперь ссылка-решение, опубликованное Станимиром в его ответе, отлично работает, и я попадаю в мой новый модуль …

Спасибо за помощь, Станимир!

0

По вопросам рекламы [email protected]