2014-01-10 77 views
0

我有以下結構的Zend控制器:的Zend控制器子目錄自定義路由

Application 
    Controllers - folder 
     AlumniAdmin - sub folder 
      DashboardController.php - class name AlumniAdmin_DashbaordController 

     IndexController.php 
     ErrorController.php 

我知道我可以使用路由訪問AlumniAdmin控制器: /alumniadmin_dashboard/anyaction

但我想作爲訪問在引導 /alumniadmin的儀表板/ anyaction

我已經使用自定義路線:

`protected function _initRoutes() 
{ 
     $router = Zend_Controller_Front::getInstance()->getRouter(); 
     $route = new Zend_Controller_Router_Route('alumniadmin-dashboard/:action/*', 
              array('controller' => 'alumniadmin_dashboard')); 

     $router->addRoute('route', $route); 
}` 

這有2個問題:

  1. 當我打/ alumniadmin的儀表板/這是給404,但/ alumniadmin的儀表板/指標做工不錯。這意味着必須定義行動。

  2. 我想用_替換所有控制器的符號。在上面的情況下,我必須明確寫出每個控制器的每個路由。

是否有任何想法如何以更好的方式解決上述問題。

謝謝! 最好的問候:)

回答

0

你可以使用Zend路由正則表達式來替換_自定義字符。請參閱here瞭解更多詳情

+0

但它如何只需要第一個參數作爲正則表達式我需要用 - 替換_ :) –

0

我找到了解決方案。但也許有更好的方法來做到這一點。以下是我的解決方案:

我已經在Bootstrap.php中寫入以下邏輯。

`protected function _initSubDirRoutes() 
{ 
    $subDirs = array(); $subDirPaths = array(); 
    $dirs = glob(APPLICATION_PATH.'/controllers/*', GLOB_ONLYDIR); 
    foreach($dirs as $dir) 
     $subDirPaths[] = strtolower(preg_replace('/(.)([A-Z])/', '$1-$2', basename($dir))); 

    $parts = explode('/', $_SERVER['REQUEST_URI']); 
    $subDirPath = $parts[3]; 
    if(in_array($subDirPath, $subDirPaths)) 
    { 
     $subDir = str_replace(' ', '', ucwords(str_replace('-',' ',$subDirPath))); 
     $controllerName = str_replace(' ', '', ucwords(str_replace('-',' ',ucfirst($parts[4])))); 
     $controller = $subDir.'_'.$controllerName; 

     $router = Zend_Controller_Front::getInstance()->getRouter(); 
     $route = new Zend_Controller_Router_Route($subDirPath.'/'.$parts[4].'/:action/*', 
              array('controller'=>$controller, 
                'action'=>'index')); 
     $router->addRoute('route', $route); 
    } 
} ` 

如果用戶在瀏覽器中點擊這個網址CSO管理員/個人信息/用戶

  1. CsoAdmin是副導演在控制器文件夾 - 區分大小寫
  2. 個人信息是名字控制器在子目錄中,類別名稱CsoAdmin_PersonalInfoController - 區分大小寫
  3. 用戶是動作名稱