2011-05-17 165 views
2

我有我的系統的結構如下:Zend框架模塊結構路由

application/ 
    configs/ 
    application.ini 
    router.php 
    layouts/ 
    modules/ 
     default/ 
     controllers/ 
     forms/ 
     models/ 
     views/ 
     Bootstrap.php 
     test/ 
     controllers/ 
     forms/ 
     models/ 
     views/ 
     Bootstrap.php 
    Bootstrap.php 

routes.php文件文件:

$useDefaultRoutes = false; 

$routes['index'] = new Zend_Controller_Router_Route(
         '', 
         array('controller' => 'index', 
         'action' => 'index', 
         'module' => 'default')); 

主要的bootstrap.php文件

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    public static function setRoutes(){ 

     $frontController = Zend_Controller_Front::getInstance(); 
     $router = $frontController->getRouter(); 

     $routes = array(); 


     if(file_exists('../application/configs/routes.php')) 
     { 

      require_once "configs/routes.php"; 

      foreach($routes as $routeName => $routeValue){ 
       $router->addRoute($routeName, $routeValue); 
      } 

      if($useDefaultRoutes == false) 
      { 
       $router->removeDefaultRoutes(); 
      } 

     } 

    } 

    protected function _initFrontModules() { 
     $this->bootstrap('frontController'); 
     $front = $this->getResource('frontController');  
     $this->setRoutes(); 
    } 

} 

問題

當我輸入瀏覽器http://address時,默認模塊啓動IndexController和 一切似乎都沒問題。但是,如果我輸入http://address/test,那麼我找不到錯誤頁面。如果我刪除routes.php文件,那麼它的作品。那麼我的路由有什麼問題?

您的幫助,將不勝感激。

+0

那是你的完整的路線清單? – 2011-05-17 09:55:09

+0

刪除$ useDefaultRoutes = false; – Ashley 2011-05-17 10:35:07

+0

@ShaunHare每個模塊都有它的Bootstrap文件。例如,測試模塊有它自己的: class Test_Bootstrap extends Zend_Application_Module_Bootstrap { } – Bounce 2011-05-17 11:13:39

回答

2

路由嘗試這一新的方式......

包括這在你的bootstrap.php

protected function _initAutoloadModules() 
{ 
    $autoloader = new Zend_Application_Module_Autoloader(
     array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH . '/modules/default' 
     ), 
     array(
      'namespace' => 'Admin', 
      'basePath' => APPLICATION_PATH . '/modules/test' 
     )    
    ); 
    return $autoloader; 
} 

這是你application.ini

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 
includePaths.library = APPLICATION_PATH "/../library" 
appnamespace = "Default" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
resources.frontController.defaultModule = "default" 
resources.frontController.defaultController = "index" 
resources.frontController.defaultAction = "index" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 
resources.layout.layout = "layout" 
resources.modules = "" 
resources.view[] = 
resources.session.remember_me_seconds = 864000 
resources.session.use_only_cookies = on 
includePaths.models = APPLICATION_PATH "/models/" 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 

module/default/bootstrap.php下面添加特定變量

​​

module/test/bootstrap.php下面添加特定變量

protected $_moduleName="test"; 
+0

這個工作正常,但是我必須將每個模塊添加到自動裝載機? – Bounce 2011-05-17 11:20:30

+0

是的,你必須添加那裏只有..用這種方法,你甚至可以設置佈局文件夾中的主佈局.. – Jaimin 2011-05-17 11:25:53

+1

是否有可能使其完全動態?不加入Autoloader? – Bounce 2011-05-17 11:41:04