Yii2: определение параметра REST API, отличного от «ID»Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Yii2: определение параметра REST API, отличного от «ID»

Сообщение Anonymous »

Я пытаюсь использовать REST API YII2 (на основе расширенного шаблона) для создания собственного сервиса. В настоящее время я успешно использую следующий URL-адрес, чтобы вернуть мне одну запись «Статья»:

http://service/articles/view?id=1

Сейчас я пытаюсь скопировать этот код, чтобы он работал для другого типа записей. Моя новая запись имеет первичный ключ под названием «key», по которому я хотел бы выполнить поиск. Соответственно, мне нужно изменить имя параметра «id» на «key».

Может кто-нибудь объяснить, как указать в этом URL-адресе параметр, отличный от «id»? Всякий раз, когда я опускаю id в качестве параметра, я получаю сообщение «Неверный запрос: отсутствуют обязательные параметры: id». Я не понимаю, откуда взялся этот обязательный параметр и как его изменить или добавить.

Соответствующие классы выглядят так:

class ArticleController extends ActiveController
{
/**
* @var string
*/
public $modelClass = 'frontend\modules\api\v1\resources\Article';
/**
* @var array
*/
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items'
];

/**
* @inheritdoc
*/
public function actions()
{
return [
'index' => [
'class' => 'yii\rest\IndexAction',
'modelClass' => $this->modelClass,
'prepareDataProvider' => [$this, 'prepareDataProvider']
],
'view' => [
'class' => 'yii\rest\ViewAction',
'modelClass' => $this->modelClass,
'findModel' => [$this, 'findModel']
],
'options' => [
'class' => 'yii\rest\OptionsAction'
]
];
}

/**
* @return ActiveDataProvider
*/
public function prepareDataProvider()
{
return new ActiveDataProvider(array(
'query' => Article::find()->published()
));
}

/**
* @param $id
* @return array|null|\yii\db\ActiveRecord
* @throws HttpException
*/
public function findModel($id)
{
$model = Article::find()
->published()
->andWhere(['id' => (int) $id])
->one();
if (!$model) {
throw new HttpException(404);
}
return $model;
}
}

class Article extends \common\models\Article implements Linkable
{
public function fields()
{
return ['id', 'slug', 'category_id', 'title', 'body', 'published_at'];
}

public function extraFields()
{
return ['category'];
}

/**
* Returns a list of links.
*
* @return array the links
*/
public function getLinks()
{
return [
Link::REL_SELF => Url::to(['article/view', 'id' => $this->id], true)
];
}
}


Заранее спасибо.

РЕДАКТИРОВАТЬ: Спецификация urlManager в структуре папок «интерфейс» выглядит следующим образом:



Подробнее здесь: https://stackoverflow.com/questions/428 ... er-than-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»