2015-09-15 56 views
0

我有一個SkeletonApplication安裝並實現了一些控制器到標準模塊'Application'中。ZendFramework2模塊之間的路由

這工作正常。

但是現在我想使用第二個模塊,並且我想要在'應用程序'模塊內設置一個路徑到新的模塊,以便在視圖中將它連接到那裏。

第二個模塊被命名爲'Sporttabs'。

// 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' 
       ), 
      ), 
     ), 



    ), 

), 

在我application.config.php在文檔中發現我給自己定試圖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

通配符路由在骨架應用程序中用作一種魔術,所以新用戶不必定義每條路線。我建議你嘗試簡化你的約束條件,並有更明確的路線,特別是要學習路由如何工作。 – dualmon

回答

0

沒有必要在您的應用程序配置中定義sporttabs。我建議你在Sporttabs的module.config.php文件中這樣做。

這是我的/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', 

    ), 
), 

相同的錯誤阻止我從進入第二模塊,路由陣列被亂序了。

現在鏈接解決方案Stanimir張貼在他的答案工作正常我進入我的新模塊...

感謝您的幫助Stanimir!