0

需要建议,因为得到“未定义的变量:第 101 行 /home/mytoys11/public_html/components/com_forms/controller.php 中的 tpl”

    function toys(){
    // Create the view
    global $Itemid;
    $model = & $this->getModel('pages');
    $view = & $this->getView('pages', 'html');
    $view->setLayout('toys');

    // Push the model into the view (as default)
    $view->setModel($model, true);

    // Display the view
    $view->toys($tpl);
}

通过从最后一行的视图中删除未定义的变量 $tpl 来解决这个问题

    function toys(){
    // Create the view
    global $Itemid;
    $model = & $this->getModel('pages');
    $view = & $this->getView('pages', 'html');
    $view->setLayout('toys');

    // Push the model into the view (as default)
    $view->setModel($model, true);

    // Display the view
    $view->toys();
}

删除 $tpl 后页面加载正常。我认为 tpl 是空字符串,但这是正确的方法还是功能优化不佳,任何建议。谢谢

编辑 谢谢,按照建议,这里的代码已修改

    public function toys(){
    $model = $this->getModel('pages');
    $view = $this->getView('pages', 'html');
    $view->setLayout('toys');
    $view->setModel($model, true);
    $view->toys();
}

但是,它不适用于将函数名称用作:-

     displaytoys()
4

1 回答 1

3

$tpl如果您不想处理视图的特定(子)模板,则忽略该参数是可以且安全的。

不过,该代码还有其他几个问题。

  1. 未声明可见性。对于控制器中的操作,这应该是public.
  2. 方法名称是动词,而不是名词。
  3. 永远不要使用global. $Itemid甚至没有使用。
  4. 不要评论明显的事实。
  5. PHP4 没有了,所以默认情况下对象是通过引用分配的。

所以你的代码应该是这样的:

public function displayToys()
{
    $model = $this->getModel('pages');
    $view  = $this->getView('pages', 'html');
    $view->setLayout('toys');
    $view->setModel($model, true);
    $view->displayToys();
}

为了使重命名displayToys工作,您还必须更改代码中的其他位置。无论您在何处引用任务toys,都必须将其更改为displayToys. 视图类中的相应方法也必须重命名。由于这只是一个风格问题,因此可以不理会名称并留toys在第一步。你不会从中得到功能问题。

于 2013-08-18T12:43:06.350 回答