Url不适用于Zend中的静态页面控制器和路由器

时间:2013-01-23 06:56:02

标签: php zend-framework

我正在使用Zend框架进行Web应用程序。我使用的库是1.12

在项目中,我有两个模块,即Default和Admin

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

在Bootstrap文件中,

    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/indexhttp://myproject/aboutus

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

http://myproject/

然后它将我重定向到404未找到的页面,同时它必须显示索引页面。

我已经跟踪了这个问题,我发现它出现在Index Controller的init()方法中,然后进入404.

我的代码有什么问题?

修改
Tim Fountain提出的解决方案解决了上述问题, 但是我发现了另一个问题,并没有通过上述技巧解决。 以下是代码,

在bootstrap文件中:

 $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 / 无效。

1 个答案:

答案 0 :(得分: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]+'                 
                            )
                        );

这样,如果网址中不存在staticpage,则会为其指定值'index'。

如果您想要渲染控制器的索引操作,只需删除staticpage的默认值,您的路线就不再符合此请求。