所有
我正在尝试开发我的第一个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
我遵循了以下步骤:
在扩展表中创建了一个条目。
INSERT INTO abc
。abc_extensions
(extension_id
,name
,type
,element
,folder
,{{1 }},client_id
,enabled
,access
,protected
,manifest_cache
,params
,custom_data
,system_data
,checked_out
,checked_out_time
,ordering
)价值观
(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);
主要组件代码mysite / component / com_abc / abc.php是;
state
控制器代码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();
视图文件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
{
}
模板文件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);
}
}
使用 index.php?option = com_abc&amp; view = main
感谢您是否可以帮助我解决问题。
非常感谢。
答案 0 :(得分:0)
// import Joomla controller library
jimport('joomla.application.component.controller');
不确定你在那里做什么,没有这样的文件,新旧控制器类都在各自的控制器文件夹中。但无论如何它们都是自动加载的,所以这不是你的问题。
更重要的是,我建议你在控制器中放置一些代码,特别是一个设置组件默认视图的显示方法。看看任何核心组件,你就会明白我的意思。正如它在JControllerLegacy :: display doc blocks中所说的那样:
答案 1 :(得分:0)
我遇到了同样的问题。检查所有类名,并确保它们遵循Joomla命名规则。您的控制器必须在站点文件夹中命名为AbcController。 回顾一下你的看法我认为它们也会给你带来麻烦