我有以下结构的zend控制器:
Application
Controllers - folder
AlumniAdmin - sub folder
DashboardController.php - class name AlumniAdmin_DashbaordController
IndexController.php
ErrorController.php
我知道我可以使用路线访问AlumniAdmin控制器: / alumniadmin_dashboard / anyaction
但我想访问为 / alumniadmin-仪表板/ anyaction
我在bootstrap中使用了自定义路由:
`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);
}`
这有两个问题:
当我点击/ alumniadmin-dashboard /它正在提供404但/ alumniadmin-dashboard / index工作正常。这意味着必须定义行动。
我想用 - 替换所有控制器的_符号。在上面的例子中,我必须为每个控制器明确写出每个路由。
有什么想法可以更好地解决上述问题。
谢谢! 最诚挚的问候:)
答案 0 :(得分:0)
您可以使用Zend路由正则表达式将_替换为自定义字符。有关详细信息,请参阅here
答案 1 :(得分: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-admin / personal-info / users