在视图中显示ActiveRecord对象的方式比使用“attributes”数组更短

时间:2018-04-16 19:35:00

标签: yii yii2

我的Model会将此信息返回给我的Controller

namespace app\models;

use yii\data\ActiveDataProvider;
use \yii\db\ActiveRecord;

class Questions extends ActiveRecord{

    public static function getQuestionById($id){
        return Questions::find()->select('title, is_textarea')->where(['id'=>$id])->one();
    }

    public static function model($className=__CLASS__)
    {
        return parent::instance();
    }
}

Controller中,它已发送到View

return $this->render('question', ['question' => Question::getQuestionById($id)]);

然后在我的View中,我必须显示如下问题:

<?= $question['attributes']['title'] ?>

没有办法以更加人性化的方式展示,例如:

<?= $question->title ?>

我尝试了它并且它正在抛出“试图获取非对象的属性”异常。我认为这是Yii的方式,就像Django,CodeIgniter等,但我在文档中找不到如何在视图中显示模型数据的例子

3 个答案:

答案 0 :(得分:0)

发送到视图时,您正在使用

分配-- #family example data ID, Email, ChildId 133587,example1@example.com,133588 133587,example1@example.com,133589 133598,example2@example.com,133599 133598,example2@example.com,133600 133604,example3@example.com,133605 133604,example3@example.com,133606 133608,example4@example.com,133609 133608,example4@example.com,133610 133623,example5@example.com,133624 133623,example5@example.com,133625 133623,example5@example.com,134811 -- Children example data ID, Email 133588,example1@example.com 133589, 133599, 133600,example2@example.com 133605, 133606, 133609,example4@example.com 133610,example4@example.com 133624, 133625, 134811,
['questions'=>$question]

应该有效

答案 1 :(得分:0)

我认为您应该澄清实现目标所需的步骤:

  1. 将数据传递到您的视图。在您的情况下,您希望传递问题的模型。您无需将数据从模型传递到控制器。实际上,您需要的数据是模型本身
  2. 因此,您可以在控制器的操作中执行此操作:

    public function actionTest($id)
    {
        $question = Questions::findOne(['id' => $id]);
        return $this->render('test', [
            'question' => $question,
        ]);
    }
    
    1. 显示数据。现在,您可以在视图文件中访问所需的模型字段:

      <?= $question->title ?>

答案 2 :(得分:0)

避免&#34;试图获得非对象的属性&#34;例外,您应该检查$ question是否存在

<强>控制器

public function actionTest($id)
{
    $question = Question::getQuestionById($id);
    if (empty($question)) {
        throw new \yii\web\NotFoundHttpException('Question not found');
    }
    return $this->render('test', [
        'question' => $question,
    ]);
}

查看

<?php

use yii\helpers\Html;
use yii\web\View;
use app\models\Question;

/**
 * @var $this View
 * @var $question Question
 */
?>
<div>
    <h1><?= Html::encode($question->title) ?></h1>
    <p>
        <?= Html::encode($question->is_textarea) ?>
    </p>
</div>