如何在Yii2中获取按类别排序项目的get参数


How to take get parameters for sorting items by category in Yii2?

我使用Yii2高级模板。在我的数据库表中,我有带有categry字段(从1..到inf)的项目

控制器动作:

public function actionIndex()
{
    $searchModel = new AdsSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

视图:

<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemOptions' => ['class' => 'item'],
    'itemView' => '_item_view',,
]) ?>

我已启用prettyUrl

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],

和.htaccess在前端/web/

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

1) 如何显示仅按类别找到的项目?现在mysite.com/items显示混合类别的所有项目我想制作mysite.com/items/cat/1或mysite.com/items/1,用category = 1 显示类别

2) 有没有关于如何将mysite.com/items/category-name-url改为数字的文章?我将类别名称存储在$app->params中。id = 5的下一个项目页面将是mysite.com/items/category-name-url/5

1)在urlManager的配置中放入:

'items/cat/<id:'d+>' => '{YOUR_CONTROLLER}/{YOUR_ACTION}',

在类似的controller中:

public function actionIndex($id) // yii2 provide $id form url
    {                         
        $dataProvider = new ActiveDataProvider([
            'query' => AdsSearch::find()->where(['category' => $id]),
            'pagination' => [
                'pageSize' => 20,
            ],
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'category' => $category
        ]);
    }

2) 在urlManager的配置中输入:

'items/<category>' => '{YOUR_CONTROLLER}/{YOUR_ACTION}',

controller

$subCategory = Yii::$app->request->get('category');
        $dataProvider = new ActiveDataProvider([
            'query' => AdsSearch::find()->where(['categoryUrl' => $subCategory]),
            'pagination' => [
                'pageSize' => 20,
            ],
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'category' => $category
        ]);

或者在我的项目中,比如CategoryGoods型号:

$category = Category::findOne(['url' => $subCategory]);
        $dataProvider = new ActiveDataProvider([
            'query' => Goods::find()->where(['categoryId' => $category->id])->with('mainPhoto'),
            'pagination' => [
                'pageSize' => 20,
            ],
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'category' => $category
        ]);