我正在开发一个具有标准标题/左列布局的Yii2项目。左列包含应从数据库中提取的类别。
我应该在哪里放置获取类别的查询?在布局中,代码将反对MVC应该如何完成,对吧?
答案 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
扩展的任何其他对象。