我正在使用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/index
或http://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 / 无效。
答案 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的默认值,您的路线就不再符合此请求。