这是我的问题。我有一个表单,我想将数据发送到JSON任务。然而,无论我做什么,任务都不会运行。我只得到以下错误:
Invalid controller: name='controls', format='json'
据我所见,没有什么可以阻止控制器运行。这是代码。
class HelloWorldControllerControls extends JController{
/*function __construct(){
parent::__construct();
}*/
public function postal(){
JFactory::getDocument()->setMimeEncoding( 'application/json' );
JResponse::setHeader('Content-Disposition','attachment;filename="status.json"');
//$postal = JRequest::getVar('postal_code',false);
//$dispatcher = JDispatcher::getInstance();
//$saveLocalCookie = $dispatcher->trigger('onSavePostalCode', array('code'=>$postal));
echo json_encode(array('success'=>true));
jexit();
}
}
这当然在站点controllers
文件夹中,并命名为controls.json.php
我已经将其与我在管理面板中使用的另一个控制器进行了匹配,该控制器做了几乎完全相同的事情,但它在管理中工作,而不是在网站中。
我用来调用这个的JRoute是.
index.php?option=com_helloworld&task=controls.postal&format=json
有什么我可以忽略的吗?
编辑:
为了澄清,我需要直接调用该任务,因为我所要做的只是以JSON格式输出原始数据,不需要视图,只需要模型和控制器。目前,由于我仍在测试中,还没有对该模型的需求。
编辑2:
找到了一个答案的一部分,但我将保留它,因为这个答案并不是那么好。基于Joomla如何在"站点"部分设置MVC(基于我的测试),这是不可能的。它总是先查找视图,然后查找控制器。我只能通过确保设置好视图来启动任务。我有可能在测试中出错并被误导,因为一个开源框架没有正确构建MVC似乎是不合逻辑的。
因此,为了解决这个问题,您需要使用"视图"作为"控制器"。
控制器文件名应为controls.php
或
如果输出是原始的,可以将其命名为controls.raw.php
,并在末尾添加&format=raw
。
您需要决定是使用新的mvc还是使用旧的mvc。新的对REST来说要好得多。
如果您扩展了JController而不是JControllerLegacy,那么您正在使用新的MVC。你应该使用REST路由和其他相关的东西。
在新的MVC中,每个控制器设计一个任务。例如,显示(获取)、创建(发布)、更新、删除,然后您可能需要其他选项。
Postal作为一项任务没有意义,因为它不是一个动词。