0

我现在正在使用 Zend Framework 编写一个应用程序,它使用数据库驱动的路由。

我已禁用默认路由,但这似乎在访问主页时导致错误。

谁能告诉我如何“重新创建”默认路由,这会将访问主页“/”的用户带到索引控制器的索引操作?

编辑@RockyFord,根据您的回答,我添加了以下内容:

if($this->_frontController->getRequest()->getRequestUri() == '/') {
    $route= new Zend_Controller_Router_Route(
        '*',
        array('controller'  => 'index',
              'action'      => 'index')
    );
    $router->addRoute('default', $route);
)

但正如你所看到的,我必须测试看看我们是否在使用 URL 的主页上。谁能建议一个更好的方法来做到这一点?

我不能使用这种规则,因为路由声明中的正斜杠被去掉了:

$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;
}
4

2 回答 2

1

从手册:

路由定义可以包含一个额外的特殊字符 - 通配符 - 由“*”符号表示。它用于收集类似于默认模块路由的参数(在 URI 中定义的 var => 值对)。以下路由或多或少模仿了 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);
于 2012-05-10T10:59:59.600 回答
1

主页路线将是:

$route = new Zend_Controller_Router_Route_Static('/', array(
    'module' => 'default',
    'controller' => 'index',
    'action' => 'index'
));
$router->addRoute('homepage', $route);

用您希望请求转到的任何控制器和操作替换默认/索引/索引值。

于 2012-05-10T11:24:42.043 回答