2013-02-27 28 views
1

我從https://github.com/zendframework/ZendSkeletonApplication下載了骷髏,它工作正常。一切都很清楚。如何路由到許多模塊?

但是當我添加另一個模塊會發生什麼?我複製模塊從骨架,我改了個名字,然後加入我的新模塊application.config.php:

return array(
    'modules' => array(
     'Application', 
     'Api', 
    ), 
[...] 

,並更改module.config.php路線:

return array(
    'router' => array(
     'routes' => array(
      'api' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => 'api/', 
        'defaults' => array(
         '__NAMESPACE__' => 'Api\Controller', 
         'controller' => 'Api', 
         'action'  => 'api', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => '/api[/:action]]', 
          'constraints' => array(
           'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
           'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
          ), 
          'defaults' => array(
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
    'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 
    'translator' => array(
     'locale' => 'en_US', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'Application\Controller\Index' => 'Application\Controller\IndexController', 
      'Application\Controller\Auth' => 'Application\Controller\AuthController' 
     ), 
    ), 
    'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'doctype'     => 'HTML5', 
     'not_found_template'  => 'error/404', 
     'exception_template'  => 'error/index', 
     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
      'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
      'error/404'    => __DIR__ . '/../view/error/404.phtml', 
      'error/index'    => __DIR__ . '/../view/error/index.phtml', 
     ), 
     'template_path_stack' => array(
      __DIR__ . '/../view', 
     ), 
    ), 
); 

但現在我明白了從api甚至從骨架位置的佈局。怎麼做?

+0

模塊是_NOT_獨立的容器。他們是交叉關注的問題,而不是你的應用程序的子部分。 – Ocramius 2013-02-27 20:09:47

回答

2

你所有的module.config.php文件將被合併在一起形成一個大的配置數組。

究竟發生了什麼,取決於您在module.config.phproutes陣列中使用的名稱。

如果您重複使用與已經提供的名稱相同的名稱(例如,您的Application模塊中已經有一條名爲api的路線),則舊條目將爲overriden

哪條路徑將被用於重定向到正確的控制器,動作和參數也取決於匹配。所有定義的路由(通過所有模塊)將按順序進行檢查。第一個匹配你當前的URL將被執行。

在你的情況下,似乎沒有任何含糊之處,因爲你把所有的東西都改名爲api(路由名稱+路由前綴),所以它可以很好地工作。當然你也可能想在其他模塊中定義完全不同的較短路徑,那麼你必須確保它們不會獲取應該被後面的模塊匹配的URL。