我正在使用Zend Framework编写应用程序,它使用数据库驱动的路由。
我已禁用默认路由,但这似乎在访问主页时导致错误。
有人能告诉我如何'重新创建'默认路由,这会将访问主页'/'的用户带到索引控制器的索引操作吗?
EDIT @RockyFord,根据你的回答,我添加了以下内容:
if($this->_frontController->getRequest()->getRequestUri() == '/') {
$route= new Zend_Controller_Router_Route(
'*',
array('controller' => 'index',
'action' => 'index')
);
$router->addRoute('default', $route);
)
但是正如您所看到的,我必须测试我们是否使用网址在主页上。任何人都可以提出更好的方法吗?
我不能使用这种规则,因为路由声明中的正斜杠被剥离了:
$route = new Zend_Controller_Router_Route_Static('/', array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
));
$router->addRoute('homepage', $route);
取自Zend_Controller_Router_Route_Static:
public function __construct($route, $defaults = array())
{
$this->_route = trim($route, self::URI_DELIMITER);
$this->_defaults = (array) $defaults;
}
答案 0 :(得分:1)
从手册:
路由定义可以包含一个特殊字符 - 通配符 - 用'*'符号表示。它用于类似地收集参数 到默认的模块路由(var => URI中定义的值对)。 以下路由或多或少模仿Module路由行为:
$route = new Zend_Controller_Router_Route(
':module/:controller/:action/*',
array('module' => 'default')
);
$router->addRoute('default', $route);
如果您对代码感兴趣, Zend_Controller_Router_Route_Module
会有路线的实际定义。
[编辑] 也许:
//not sure if the name will work or not, might need empty string?
$route = new Zend_Controller_Router_Route_Static(
'/',
array('controller' => 'index', 'action' => 'index')
);
//also might need a better name like 'home'
$router->addRoute('/', $route);
答案 1 :(得分:1)
主页路线就是:
$route = new Zend_Controller_Router_Route_Static('/', array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
));
$router->addRoute('homepage', $route);
使用您希望请求转到的控制器和操作替换默认/索引/索引值。