使用自定义路由的控制器无效

时间:2012-03-25 01:26:45

标签: zend-framework

我一直在遵循有关如何从书籍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

默认索引操作正常,只是这个路由不起作用。

2 个答案:

答案 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作为路线。这会对你有所帮助。