0

我正在使用 Zend 框架做 web 应用程序。我正在使用的库是 1.12

在项目中,我有两个模块,即默认和管理

默认模块有一些静态页面,我已经设置了路由器。在路由器中我设置了控制器和动作,请参考下面的代码。

在引导文件中,

    protected function _initModules() {

        $defaultstaticRoute = new Zend_Controller_Router_Route(
                                '/:staticpage',
                                array('module' => 'default',
                                    'controller' => 'index',
                                    'action' => 'displaystatic',
                                    'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'  
                                    ),                 
                                array(
                                   'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'                 
                                )
                            );

            $router->addRoute('defaultstatic', $defaultstaticRoute);
    }

在控制器中,

class IndexController extends Zend_Controller_Action
{
    public function init()
    {

    }

    public function indexAction()
    {

    }

    public function displaystaticAction()
    {       
        //get the file name from the url
       $page = $this->getRequest()->getParam('staticpage');

        //render the view
       $this->render($page);

     }
}

http://myproject/index如果 url 是这样的,上面的代码可以正常工作 http://myproject/aboutus

但是,如果 url 没有页面名称,比如

http://myproject/

然后它将我重定向到 404 not found 页面,而它必须显示索引页面。

我已经跟踪了这个问题,我发现它出现在索引控制器的 init() 方法中,并且在它进入 404 之后。

我的代码有什么问题?

编辑:
上述问题由 Tim Fountain 给出的解决方案解决,但我发现另一个问题并没有通过上述技巧解决。下面是代码,

在引导文件中:

 $servicesstaticRoute = new Zend_Controller_Router_Route(
    'services/:pagename',
    array('module' => 'default',
            'controller' => 'services',
            'action' => 'displayservices',
            'pagename' => 'index'    
        ),                 
        array(
           'pagename' => '([a-z0-9]+-)*[a-z0-9]+'                 
        )
    );
$router->addRoute('servicesstatic', $servicesstaticRoute);

对于上面的代码http://myproject/services/index有效但http://myproject/services/无效。

4

1 回答 1

2

路由中的第一个数组提供默认值。如果要http://myproject/渲染静态页面'index',则需要staticpage将此数组中的值更改为'index':

$defaultstaticRoute = new Zend_Controller_Router_Route(
                            '/:staticpage',
                            array('module' => 'default',
                                'controller' => 'index',
                                'action' => 'displaystatic',
                                'staticpage' => 'index'  
                                ),                 
                            array(
                               'staticpage' => '([a-z0-9]+-)*[a-z0-9]+'                 
                            )
                        );

这样,如果staticpageURL 中不存在,它将被赋予值“索引”。

如果您希望改为呈现控制器的 index 操作,只需删除 staticpage 的默认值,您的路由将不再匹配此请求。

于 2013-01-23T10:17:58.020 回答