Я пытаюсь использовать 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
Yii2: определение параметра REST API, отличного от «ID» ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1719792509
Anonymous
Я пытаюсь использовать REST API YII2 (на основе расширенного шаблона) для создания собственного сервиса. В настоящее время я успешно использую следующий URL-адрес, чтобы вернуть мне одну запись «Статья»:
http://service/articles/view?id=1
Сейчас я пытаюсь скопировать этот код, чтобы он работал для другого типа записей. Моя новая запись имеет первичный ключ под названием «key», по которому я хотел бы выполнить поиск. Соответственно, мне нужно изменить имя параметра «id» на «key».
Может кто-нибудь объяснить, как указать в этом URL-адресе параметр, отличный от «[b]id[/b]»? Всякий раз, когда я опускаю 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 в структуре папок «интерфейс» выглядит следующим образом:
Подробнее здесь: [url]https://stackoverflow.com/questions/42812990/yii2-defining-a-rest-api-parameter-other-than-id[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия