Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (1)
  • Как фильтровать выборку значений из таблицы в REST Yii с помощью других полей(не только id)?

    @Absolutus_Deo
    Вы наследуетесь от ActiveController, что создает методы из коробки в методе actions

    public function actions()
        {
            return [
                'index' => [
                    'class' => 'yii\rest\IndexAction',
                    'modelClass' => $this->modelClass,
                    'checkAccess' => [$this, 'checkAccess'],
                ],
                'view' => [
                    'class' => 'yii\rest\ViewAction',
                    'modelClass' => $this->modelClass,
                    'checkAccess' => [$this, 'checkAccess'],
                ],
                'create' => [
                    'class' => 'yii\rest\CreateAction',
                    'modelClass' => $this->modelClass,
                    'checkAccess' => [$this, 'checkAccess'],
                    'scenario' => $this->createScenario,
                ],
                'update' => [
                    'class' => 'yii\rest\UpdateAction',
                    'modelClass' => $this->modelClass,
                    'checkAccess' => [$this, 'checkAccess'],
                    'scenario' => $this->updateScenario,
                ],
                'delete' => [
                    'class' => 'yii\rest\DeleteAction',
                    'modelClass' => $this->modelClass,
                    'checkAccess' => [$this, 'checkAccess'],
                ],
                'options' => [
                    'class' => 'yii\rest\OptionsAction',
                ],
            ];
        }


    Так, что запрос по типу back.ru/rest/10 - выводит детальную инфу по записи, а именно ActionView

    Для того, что бы вам сделать фильтрацию такого вида как вы написали необходимо переопределить метод index или view в зависимости от того в котором нужно фильтровать, можна сделать с помощью callback.
    'dataFilter' => [
                        'class' => 'yii\data\ActiveDataFilter',
                        'searchModel' => 'path/To/Search,
                    ],

    В этом случае вы сохраните возможность фильтровать за дефолтом как сделано в YII2.

    В вашем же случае можно сделать так, переопределить prepareDataProvider(), а в самом методе:

    $searchModel = new \app\models\SearchModel();    
    return $searchModel->search(\Yii::$app->request->queryParams);


    Если детально, то:
    Можно переопределить prepareDataProvider для действия index.
    public function actions()
            {
                $actions = parent::actions();
                $actions['index']['prepareDataProvider'] = [$this, 'prepareDataProvider'];
    
                return $actions;
            }
    
    public function prepareDataProvider()
            {
                $searchModel = new \app\models\SearchModel();
                $dataProvider = $searchModel->search(\Yii::$app->request->queryParams);
                return $dataProvider;
            }
    Ответ написан
    Комментировать