【问题标题】:Joomla 2.5 site task will not fireJoomla 2.5 站点任务不会触发
【发布时间】:2013-08-02 21:26:40
【问题描述】:

这是我的问题。我有一个表单,我想将数据发送到 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 的开源框架似乎不合逻辑。

因此,为了解决此问题,您需要使用“视图”作为“控制器”。

【问题讨论】:

  • 看到这似乎不是同一个问题。我会更新问题以澄清,谢谢。
  • 不客气,但我怀疑我能提供任何进一步的帮助,我想我会在 Google 上为你找到什么。祝乔丹好运,干杯。
  • 我没有发现你的代码有什么问题,所以我建议你尝试直接从浏览器调用你的任务,你可以使用 firebug 的网络功能来验证你发送的内容和你发送的内容'要回来了。看起来它没有找到您的控制器。 Valentin Despa 是对的,你可以使用 raw 而不是 json,如果你相应地处理事情(比如在 jquery 中指定响应格式),则无需设置标头。

标签: php joomla joomla-task


【解决方案1】:

您需要决定是否使用新的 mvc o 旧的。新的对于 REST 来说要好得多。

如果您扩展 JController 而不是 JControllerLegacy,则您正在使用新的 MVC。你应该使用 REST 路由和其他相关的东西。

在新的 MVC 中,每个控制器设计都有一个任务。例如显示(获取)、创建(发布)、更新、删除,然后您可能需要额外的。

邮政作为一项任务没有意义,因为它不是动词。

【讨论】:

  • "postal" 只是 "postal code" 的一个较短版本,因为该任务用于在 cookie/会话中记录用户的邮政编码。但我很困惑,你的意思是用 legacy 代替吗?
  • 您看起来像是在使用旧版 MVC,所以您应该说将 JControllerLegacy nto JController 扩展...有关此示例,请参阅核心 CMS 中的所有扩展。
  • @Elin:他说他使用的是 Joomla 2.5,所以没有新的 MVC,因此不需要添加旧后缀,对吗?
【解决方案2】:

控制器文件名应为controls.php

如果输出是原始的,则将其命名为 controls.raw.php 并在末尾添加 &format=raw

【讨论】:

  • 已尝试删除 .json 部分,但尚未尝试 .raw。 WSIR - 两者都没有运气,同样的错误没有变化。
  • Invalid controller: name='controls', format='raw' 同样的事情略有不同的错误。
  • 如果您将其称为controls.php 并完全不使用格式键,它会起作用吗?我明白您为什么要指定格式,但我认为实际上没有必要。
  • @DavidFritsch:如果您不指定格式,它将查找“常规”视图。我知道如果您使用 Valentin 指出的原始格式,则不会。这样就可以直接从控制器输出。
  • 这很奇怪。我一直这样做。我有很多组件只有一个控制器,没有关联的模型或同名视图。我使用相同的task 设置加载它们。由于控制器以jexit() 结尾,它不应该寻找视图。
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2018-11-24
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多