【问题标题】:Yii : data is not passed to viewYii : 数据没有传递给视图
【发布时间】:2014-03-25 22:21:57
【问题描述】:

拥有这个小部件类:

class ValuesSetWidget extends CWidget {

public $id = null;
public $listHtmlOptions = array();
public $addDivClasses = "";
public $model;
public $attribute;
public $name;
public $value;

public function init()
{
    //registramos script básico
    Yii::app()->getClientScript()->registerScriptFile('/js/JSON.js');

    $name = ($this->model) ? get_class($this->model).'-'.$this->attribute : $this->name;
    $this->id = ($this->id) ? $this->id : 'id'.$name;

    return $this->render('application.widgets.ValuesSet.widget', array('context' => $this), true);
}

}

作为这个视图被调用:

<?php
$id = $context->id;
$buttonid = $id.'-button';
$hiddenid = $id.'-hidden';
$selectid = $id.'-select';
$dialogid = $id.'-dialog';
$htformid = $id.'-form';
Yii::app()->clientScript->registerCoreScript('jquery.ui');
Yii::app()->clientScript->registerCssFile(Yii::app()->getClientScript()->getCoreScriptUrl().'/jui/css/'.(isset($theme) ? $theme : 'base').'/jquery-ui.css');
?>
<!-- more html/php for the view here... -->

我收到这样的错误:

问题:为什么当我使用 render() 将数据传递给小部件视图时,$context 没有被传递?
目标:我需要传递视图文件的整个上下文。

【问题讨论】:

  • 截图和贴出的代码不匹配。 (屏幕截图指的是 $this_,这是一个明显的拼写错误。)另外,视图文件中的 $this 指的是渲染器,在本例中是小部件,因此无需传递“上下文”。最后,渲染代码通常放在 run() 中,而不是 init() 中。
  • 抱歉,稍后将“this_”更新为“context”。没有更新截图。错误不在 $this_ 中,而在代码的其他部分。 (当第一次出现错误时,我在将“this”分配为键时出错。然后我得到一个上下文错误并将变量重命名为“this_”(因此,$this_);最后由于我的建议将this_改为context。整个过程中,没有更新截图)。
  • 发送了一个答案来解释这个错误。

标签: php yii widget yii-components


【解决方案1】:

您的代码未包含所有受影响的内容。但是,错误消息是您的线索。

代替

 $id = $this_->id

使用

 $id = $this->id

在 widget.php 中

【讨论】:

  • 抱歉,稍后将“this_”更新为“context”。没有更新截图。错误不在 $this_ 中,而在代码的其他部分。 (当第一次出现错误时,我在将“this”分配为键时出错。然后我得到一个上下文错误并将变量重命名为“this_”(因此,$this_);最后由于我的建议将this_改为context。整个过程中,没有更新截图)。
【解决方案2】:

对不起:p。错误不在该代码中。

它从来没有工作过($this、$this_ 和 $context),因为我在 createWidget() 调用中错误地引用了视图文件(我没有引用小部件的类文件,而是引用了小部件的视图文件)。这导致文件被导入/需要,因此被发送到输出但没有任何数据(因为没有数据被传递给小部件创建)。

最后,变量名并不是真正的问题,因为它们都不存在——这是错误的文件引用。

【讨论】:

  • 感谢您的回帖,在找到解决方案方面做得很好。当您在此过程中学到一些东西时,肯定会感觉很好。
  • 当学到的东西是关于类似的东西而不是一种内部问题或真正的错误时,感觉很糟糕。让我想射我的右脚 xD。
猜你喜欢
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2019-11-01
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多