【问题标题】:Invalid controller using custom routes使用自定义路由的控制器无效
【发布时间】:2012-03-25 01:26:45
【问题描述】:

我一直在按照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

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

【问题讨论】:

  • 我觉得你的观点有问题,应该是display.phtml
  • 嗯,它应该路由到 about.phtml,因为控制器使用:page 参数来查找正确的视图文件。所以应该是about.phtml
  • @haltabush 如果 AlexW 得到解决方案,你能把它标记为答案吗?

标签: zend-framework


【解决方案1】:

如果您实际上密切关注这本书,那么您的路由声明中会多出一行,并且您的控制器类应该是 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。

希望这会有所帮助。

【讨论】:

  • 你说得对,我出于某种原因添加了一条查看线...昨晚我这样做的时候已经很晚了。稍后会检查它...感谢您的提示。
  • 很遗憾,更新application.ini文件后,还是失败了。发生完全相同的错误,除了这次请求参数数组不包含view 文件名。还是谢谢你。
  • 您是否取消了 Default_StaticContentController 的“默认”?
  • @RockyFord 你太棒了,感激不尽。
【解决方案2】:

我现在不知道你用什么来自动加载。所以这将有助于确定。到目前为止,我理解你的类命名应该类似于这个 ModulePath_ApplicationPath_ControllerName,所以它的 Default_Application_StaticContentController。

为了更好的路由,我更喜欢zend manual。你可以试试这个tutorial 的路线。它会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2011-12-03
    • 2015-10-12
    • 2013-09-30
    • 2018-09-14
    • 2018-02-20
    相关资源
    最近更新 更多