我应该在哪里为Yii2中的布局放置数据库查询

时间:2015-06-29 09:24:24

标签: php model-view-controller yii2

我正在开发一个具有标准标题/左列布局的Yii2项目。左列包含应从数据库中提取的类别。

我应该在哪里放置获取类别的查询?在布局中,代码将反对MVC应该如何完成,对吧?

1 个答案:

答案 0 :(得分:5)

定义你不应该在布局中放置任何SQL代码,它违反了MVC模式,视图目的是显示而不是这种逻辑。

因为它是常见的元素,所以小部件似乎是适用于您的情况的好选择。您可以将SQL放入run()方法,例如:

<?php

namespace frontend\widgets;

use frontend\models\tests\Test;
use yii\base\Widget;

class NewTests extends Widget
{
    /**
     * @inheritdoc
     */
    public function run()
    { 
        $tests = Test::find()
            ->orderBy(['created_at' => SORT_DESC])
            ->limit(10)
            ->all();

        return $this->render('new-tests', ['tests' => $tests]);
    }
}

根据您的需要填充小部件视图,然后您可以在布局中显示它:

use frontend\widgets\NewTests;

...

<?= NewTests::widget() ?>

此外,您可以将窗口小部件配置为从yii\base\Object扩展的任何其他对象。