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

ale*_*nst 1 php model-view-controller yii2

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

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

aro*_*hev 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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

use frontend\widgets\NewTests;

...

<?= NewTests::widget() ?>
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以在高级应用程序模板[这里](https://github.com/yiisoft/yii2-app-advanced/tree/master/common/widgets)中看到它是如何使用的.所以对于小部件来说,它是`application folder/widgets`.您也可以将其放在模块中.默认视图路径是`widgets path/views`. (2认同)