在Joomla控制器中注册任务

3

我正在尝试在Joomla 3.x的控制器中注册自定义任务,因此我正在修改构造函数(就像1.5 / 2.5中一样),使用以下代码:

<?php
 // No direct access to this file
defined('_JEXEC') or die('Restricted access');

class jjemailControllerjjemail extends JControllerLegacy
 {
/**
 * constructor (registers additional tasks to methods)
 * @return void
 */
public function __construct($config = array())
{
    parent::__construct($config);

    // Register Extra tasks
    $this->registerTask('email, 'email');
}

public function email()
{
    $this->setRedirect('index.php?option=com_jjemail&view=thanks', $msg);
}
}

现在,如果我在任务注册之前的构造函数中添加一个var dump,则会显示,但在email()函数中添加一个var dump却什么也没有显示。所以我猜我在某个地方注册任务失败了。
调用此路由看起来像:JRoute::_('index.php?option = com_jjemail&task = jjemail.email'); 有人有任何想法,为什么我会以这种愚蠢的方式失败吗?

$this->registerTask('email, 'email'); 在第一个 "email" 后面缺少一个单引号。 - Erenor Paz
1个回答

6

自 Joomla 1.5 版本开始,您不需要注册默认任务的名称。您只需注册别名,将其映射到控制器方法之一即可:

$this->registerTask('emailAbc, 'email');
$this->registerTask('unpublish, 'publish');

如果您无法停止应用程序的执行,则表明您从表单/链接中调用了错误的任务。
检查您的表单/链接是否包含正确的任务,例如:option=com_jjemail?task=jjemail.email。 Joomla会为您完成所有工作,将"jjemail.email"映射到您控制器的电子邮件方法。

谢谢 :) 我会删除我的构造函数。我认为表单链接工作正常 - 因为在Joomla 2.5中控制器中的任务运行得非常好。 - George Wilson
这也适用于Joomla 3.1。 - CrandellWS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接