2015-04-08 10 views
1

Я пытаюсь использовать те же названия маршрутов для двух разных модулей, возможно ли это?zend framework 2 - проблема с использованием того же имени маршрута в двух разных модулях

Модуль Пользователь:

/*Module.config.php*/ 

'dashboard' => array(
       'type' => 'segment', 
       'options' => array(
        'route' => '/dashboard', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        ), 
        'defaults' => array(
         'controller' => 'Users\Controller\Users', 
         'action'  => 'dashboard', 
        ), 
       ), 
), 

Модуль Администратор:

/*Module.config.php*/ 

'dashboard' => array(
       'type' => 'segment', 
       'options' => array(
        'route' => '/dashboard', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        ), 
        'defaults' => array(
         'controller' => 'Admin\Controller\Admin', 
         'action'  => 'dashboard', 
        ), 
       ), 
), 

Eventhough Я создаю 2 различных модулей для приборной панели, я загружая только какую-то одну акцию.

Как я могу это достичь?

+1

Что вы хотите? Вы сказали, что пытаетесь использовать два разных имени маршрута, но оба маршрута в вашем примере имеют одно и то же имя, поэтому один будет перезаписывать другой. –

+0

Извините tim, это были «те же названия маршрутов», –

ответ

5

Я думаю, что вы не можете иметь одно и то же имя для двух разных маршрутов. Да, это два разных модуля, но это одно и то же приложение.

Причина заключается в том, что когда Zend\ModuleManager загружает модули, событие ModuleEvent::EVENT_LOAD_MODULE будет срабатывать, а затем listenerZend\ModuleManager\Listener\ConfigListener будет вызывать функцию getConfig() каждого отдельного модуля в вашем приложении. И тогда все Module->getConfig() будут объединены в одну внутреннюю конфигурацию под названием application.config.

Это означает, что при загрузке модулей у вас будет два маршрута с одним и тем же именем, а разница между модулями ничего не влияет на routing.

Даже если может сделать это, вы будете сталкиваться с другими проблемами, когда вы хотите использовать Redirect Plugin, например, метод toRoute нужно название маршрута в качестве параметра:

toRoute (строка $ маршрут = нуль, массив $ PARAMS = массив(), массив $ вариантов = массив(), булевы $ reuseMatchedParams = ложь)

Это проблема, если вы должны вызвать его с таким же названием маршрута.

Возможное решение для вашей проблемы, чтобы установить один маршрут и добавить модуль к нему, а именно:

/приборная панель/администратор /-отдых-оф-URL

/приборная панель/пользователь /-отдых-оф-URL

Вы будете иметь что-то подобное в вашей конфигурации маршрута:

'dashboard' => array( 
'type' => 'segment', 
'options' => array( 
    'route' => '/dashboard[/:module][/:controller][/:action][/:id]', 
    'constraints' => array( 
     'module'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
     'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
     'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
     'id'   => '[0-9]+', 
    ), 
    'defaults' => array( 
     'controller' => 'Application', 
     'action'  => 'index', 
    ), 
), 
'may_terminate' => true, 
'child_routes' => array( 
    'default' => array( 
     'type' => 'Wildcard', 
     'options' => array( 
     ), 
    ), 
), 
),