我一直在遵循有关如何从书籍Zend Framework - A Beginners Guide
创建自定义路线的说明我已更改application.ini
文件以包含此路由信息:
resources.router.routes.static-content.route = /content/:page
resources.router.routes.static-content.defaults.module = default
resources.router.routes.static-content.defaults.controller = static-content
resources.router.routes.static-content.defaults.view = static-content
resources.router.routes.static-content.defaults.action = display
鉴于上述配置,我有这个控制器:
<?php
class Default_StaticContentController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function displayAction()
{
// action body
$page = $this->getRequest()->getParam('page');
if (file_exists($this->view->getScriptPath(null) .
'/' . $this->getRequest()->getControllerName() . '/' .
$page . $this->viewSuffix
)) {
$this->render($page);
}
else {
throw new Zend_Controller_Action_Exception('HLC - Page not found', 404);
}
}
}
我在APPLICATION_PATH / modules / default / views / static-content文件夹中有一个名为about.phtml
的视图。
什么啊,我得到一个错误说:
An error occurred
Page not found
Exception information:
Message: Invalid controller class ("StaticContentController")
Stack trace:
#0 /Applications/MAMP/htdocs/zend/library/Zend/Controller/Dispatcher/Standard.php(262): Zend_Controller_Dispatcher_Standard->loadClass('StaticContentCo...')
#1 /Applications/MAMP/htdocs/zend/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#2 /Applications/MAMP/htdocs/zend/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#3 /Applications/MAMP/htdocs/zend/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#4 /Applications/MAMP/htdocs/HLC/public/index.php(26): Zend_Application->run()
#5 {main}
Request Parameters:
array (
'page' => 'about',
'module' => 'default',
'controller' => 'static-content',
'view' => 'static-content',
'action' => 'display',
)
请注意,它不是渲染我自定义的Zend_Controller_Action_Exception
,而是抛出全局错误。
我正在使用网址:http://hlc.local:8888/content/about
默认索引操作正常,只是这个路由不起作用。
答案 0 :(得分:2)
如果你真的密切关注这本书,你的路线声明中还有一行,你的控制器类应该是StaticContentController
。
这是书中的路线定义。
resources.router.routes.static-content.route = /content/:page
resources.router.routes.static-content.defaults.module = default
resources.router.routes.static-content.defaults.controller = static-content
resources.router.routes.static-content.defaults.action = display
我仍然有这个代码从去年夏天开始。
我觉得这本书不太令人满意,对初学者来说并不是这样。它没有解决Zend_Db组件选择引入Doctrine 1.2的问题。似乎是一种趋势,许多这些初学者/简单书籍认为完整的ORM比Zend_Db更有用。如果你已经熟悉Doctrine,这种方法可以正常工作,否则要求初学者,同时学习ZF和Doctrine是很多的。
希望这有帮助。
答案 1 :(得分:0)
我现在不用于自动加载。所以这有助于确定。到目前为止,我理解你的名字应该是这样的ModulePath_ApplicationPath_ControllerName,所以它的Default_Application_StaticContentController。
为了更好的路由,我更喜欢zend manual。您可以尝试使用此tutorial作为路线。这会对你有所帮助。