joomla错误:#0控制器类无效:

时间:2014-07-28 11:44:35

标签: php joomla

所有

我正在尝试开发我的第一个Joomla组件,并且我正在here跟踪MVC教程。

但我无法取得多大进展,因为我收到了以下错误。

#0 Invalid controller class: AbcController

我已启用调试跟踪,并且它在以下行中发出错误:

JControllerLegacy::getInstance()

不用说,我已经花了很长时间寻找解决方案,但找不到任何解决方案。

我正在努力:

OS: Windows 8.1
PHP version: 5.5.6
MySQL version: 5.6.16
Joomla version: Joomla! 3.3.1 Stable

我遵循了以下步骤:

  1. 在扩展表中创建了一个条目。

    INSERT INTO abcabc_extensionsextension_idnametypeelementfolder,{{1 }},client_idenabledaccessprotectedmanifest_cacheparamscustom_datasystem_datachecked_outchecked_out_timeordering)价值观 (701,' com_abc','组件',' com_abc','',1,1,1,0,&#39 ; {"名称":" com_abc""类型":"组分"" creationDate":&#34 ; 2014年7月","作者":" ABC项目","版权":"(C)2005 - 2014年开源事项。所有版权所有。\ n \ t"," authorEmail":" admin@joomla.org"," authorUrl":" www.abc。有机""版本":" 1.0.0""描述":" COM_ABC_DESCRIPTION""组&#34 ;:""}',' {"已启用":" 0"," show_date":&# 34; 1"}','','',0,' 0000-00-00 00:00:00', 0,0);

  2. 主要组件代码mysite / component / com_abc / abc.php是;

    state
  3. 控制器代码mysite / component / com_abc / controller.php是:

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // import joomla controller library
    jimport('joomla.application.component.controller');
    
    // Get an instance of the controller prefixed by HelloWorld
    $controller = JControllerLegacy::getInstance('Abc');
    
    // Perform the Request task
    $input = JFactory::getApplication()->input;
    $controller->execute($input->getCmd('task'));
    
    // Redirect if set by the controller
    $controller->redirect();
    
  4. 视图文件mysite / component / com_abc / views / main / view.html.php包含:

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // import Joomla controller library
    jimport('joomla.application.component.controller');
    
    /**
     * Hello World Component Controller
     */
    class AbcController extends JControllerLegacy
    {
    
    }
    
  5. 模板文件mysite / component / com_abc / views / main / tmpl / default.php包含:

    <?php
    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // import Joomla view library
    jimport('joomla.application.component.view');
    
    /**
     * HTML View class for the HelloWorld Component
     */
    class AbcViewMain extends JViewLegacy
    {
            // Overwriting JView display method
            function display($tpl = null) 
            {
                    // Assign data to the view
                    $this->msg = 'Hello World';
    
                    // Display the view
                    parent::display($tpl);
            }
    }
    
  6. 使用 index.php?option = com_abc&amp; view = main

  7. 调用该视图

    感谢您是否可以帮助我解决问题。

    非常感谢。

2 个答案:

答案 0 :(得分:0)

// import Joomla controller library
jimport('joomla.application.component.controller');

不确定你在那里做什么,没有这样的文件,新旧控制器类都在各自的控制器文件夹中。但无论如何它们都是自动加载的,所以这不是你的问题。

更重要的是,我建议你在控制器中放置一些代码,特别是一个设置组件默认视图的显示方法。看看任何核心组件,你就会明白我的意思。正如它在JControllerLegacy :: display doc blocks中所说的那样:

  • 此函数作为默认实现提供,大多数情况下
  • 您需要在自己的控制器中覆盖它。

答案 1 :(得分:0)

我遇到了同样的问题。检查所有类名,并确保它们遵循Joomla命名规则。您的控制器必须在站点文件夹中命名为AbcController。 回顾一下你的看法我认为它们也会给你带来麻烦