0

我正在尝试使用以下 url 从子控制器返回任务的结果:

index.php?option=com_example&task=subctrl.test&format=json

但我不断收到500 View not found错误...

class ExampleControllersSubctrl extends JControllerForm
{
    public function test()
    {
                $result= array("val1","val2");
        echo json_encode($result);
    }
}

我尝试将子控制器文件命名为 Subctrl.php 和 Subctrl.json.php,但都没有奏效。我相信我不需要视图来根据我读过的其他 SO 帖子呈现结果,但也许这是不正确的。

当我让它工作时,这个设置最终将用于返回一个 Ajax 调用。我在这里做错了什么?

4

2 回答 2

3

在 echo 语句之后添加退出语句,否则 Joomla 将继续处理组件并尝试调用视图。由于未设置视图值,因此将找不到视图,系统将重定向到错误页面。完整代码如下:

class ExampleControllerSubctrl extends JControllerForm
{
    public function test()
    {
        $result= array("val1","val2");
        echo json_encode($result);
        exit();
    }
}

Joomla 还可以使用其他一些方法,例如 calljexit()JFactory::getApplication()->close(). 总体思路是让应用程序在此处停止。继续是浪费。

此外,必须确保类名设置正确。Controller中间工作不应该Controllers

于 2013-10-29T04:08:56.880 回答
1

问题是您正在扩展,如果未提供JControllerForm,它将尝试view为您猜测。form

在 Joomla 2.5 上,您可以更改JControllerFormJController,这将解决问题。

由于您有一个JSON控制器,Joomla 将通过format=json您路由到您的控制器,因此您的方法也不需要退出test()

于 2013-10-29T07:11:09.883 回答