【问题标题】:Where does the sorting/per-page logic belong in Yii2 based application?基于 Yii2 的应用程序中的排序/每页逻辑属于哪里?
【发布时间】:2014-12-14 20:37:31
【问题描述】:

我在 Yii2 中有一个控制器,它将产品目录显示为产品列表。产品目录有一个控件(选择)来设置排序(流行度、价格等)和每页条目(12、24 等)。

有几条逻辑,我正在尝试将它们放在正确的层中:

  1. 可能的排序列列表和可能的每页值列表
  2. 默认排序列和默认每页值
  3. 从请求中获取参数(即 $_GET['sort']),如果请求为空则回退到默认值

在 Yii2 中实际上有一个 View 对象,所以也许其中一些需要进入它?

【问题讨论】:

  • 对于不知道的人,你可能想拼出Model、View和Controller。
  • 排序最好由代表域对象集合(在模型层中)的实例处理,因为“订单”是一种状态,适用于业务逻辑。至于分页 - 它是 UI 逻辑的一部分。 UI 逻辑由视图实例管理(直接或通过表示对象)。当然这只适用于 MVC,但是 Yii 并没有实现 MVC
  • 没有实现 MVC,你说?至少 Yii2 比 Yii1 更接近 MVC。不过,这几乎是一个圣战问题。

标签: php yii2


【解决方案1】:

在 Yii2 中,ModelNameSearch.php 负责这一点。这就是我设置它的方式(不完全是,但这是简单的版本):

在控制器中

/**
 * Sets the pagination for the list
 * @return mixed
 */
public function actionPagination()
{
    TagSearch::setPerPage(Yii::$app->request->queryParams['records']);
    $this->redirect(['index']);
}

在标签搜索中

    public function setPerPage($recordPerPage)
    {
        Yii::$app->session->set(self::className() . 'Pagination', $recordPerPage);
    }

    public function getPerPage()
    {
        return Yii::$app->session->get(self::className() . 'Pagination', 25),
    }

.....................
    public function search($params)
    {
..............................
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => self::getPerPage()
            ],
        ]);
......................
}

在视图中随意做一个

<?= Html::dropDownList('pagination', TagSearch::getPerPage(), ['10' => '10 per page', '25' => '25 per page', '50' => '50 per page', '100' => '100 per page'], ['class' => "form-control input-sm pagination", 'data-change'=> Url::toRoute('pagination')]) ?>

并添加一个

$('select.pagination').on('change', function() {
    document.location.href = $(this).attr('data-change') + '?records=' + $(this).val();
});

我需要自己检查变量的命名,上面的代码(我写的是复制粘贴和更改)可能有错误,但你明白了。

【讨论】:

  • 谢谢!我是 Yii2 的新手,我没有意识到与 Yii1 不同,搜索表单可以有一个单独的模型(这就是分页和排序的全部内容——它们是搜索参数)。 Gii 实际制作了这个模型,我只是不知何故错过了它。
猜你喜欢
  • 1970-01-01
  • 2019-11-06
  • 2010-09-25
  • 1970-01-01
  • 2014-07-10
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多