Yii 2获取未知属性:yii \ web \ View :: attribute

时间:2016-04-01 22:40:45

标签: php yii widget yii2

我有一个小工具UploadmaWidget:

namespace vendor\maydin;
use yii\base\Widget;
use yii\helpers\Html;
class UploadmaWidget extends Widget
{
    public $message;
    public $model;
    public $attribute;
    public function init()
    {
        parent::init();
        if ($this->message === null) {
            $this->message = 'Hello World';
        }
    }
    public function run()
    {
        UploadmaWidgetAsset::register($this->getView());
        return $this->render('index',['message'=>$this->message]);
    }
    public function getViewPath()
    {
        return '@vendor/maydin/views/';
    }

}

我在索引视图文件中渲染:

 <?php
    use yii\helpers\Html;
    use yii\web\View;
    ?>
    <?= $this->message;?>
    <?= $this->attribute;?>

如果我调用消息值没问题但属性有问题。我不想通过渲染功能发送属性值。

编辑:因为我在Yii 1.1中有这样的小部件,但它在Yii 2.0(NOW)中不起作用

最后我像这样调用小部件:

<?php  
use vendor\maydin\UploadmaWidget;
echo UploadmaWidget::widget([
'message' => 'Hello World',
'model'=>$model,
'attribute' => 'mahmut', 
]) ;?>

如何在窗口小部件视图文件中使用属性值?

1 个答案:

答案 0 :(得分:1)

您应该将属性传递给run的{​​{1}}方法,类似于传递消息:

UploadmaWidget

完成此更改后,您可以在视图中使用public function run() { UploadmaWidgetAsset::register($this->getView()); return $this->render('index', ['message'=>$this->message, 'attribute'=>$this->attribute]); }

在Yii1中,CWidget扩展了CBaseController,在视图中你可以访问CWidget公共属性,但不能访问Yii2。我们可以在这里比较一下实现:

  • Yii2中的Widget类及其render方法
  • Yii1中的Widget类及其render方法