2011-05-17 162 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