Наследование REST ACTION
Наследование REST ACTION
Суть: есть модель news. Каждый раз когда идет обращение к модели нужно инкрементировать поле hits.
В связи с этим возникла такая идея: переопределяю actionView($id), делаю вызов parent::actionView($id), меняю поле hits и сохраняю модель. Но система ругается что нет такого actionView у родителя. Как быть??
В связи с этим возникла такая идея: переопределяю actionView($id), делаю вызов parent::actionView($id), меняю поле hits и сохраняю модель. Но система ругается что нет такого actionView у родителя. Как быть??
Re: Наследование REST ACTION
Просто заменил метод view:
Код: Выделить всё
public function actionView($id)
{
$model = News::findOne($id);
++$model->hits;
$model->save();
return $model;
}
public function actions()
{
$actions = parent::actions();
// убираем старый метод
unset($actions['view']);
return $actions;
}
Re: Наследование REST ACTION
тут у вас race conditiona.k. писал(а):Просто заменил метод view:
Код: Выделить всё
public function actionView($id) { $model = News::findOne($id); ++$model->hits; $model->save(); return $model; } public function actions() { $actions = parent::actions(); // убираем старый метод unset($actions['view']); return $actions; }
используйте updateCounters
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Наследование REST ACTION
Это что за зверь?anton44eg писал(а): тут у вас race condition
Re: Наследование REST ACTION
https://ru.wikipedia.org/wiki/%D1%EE%F1 ... E%ED%EA%E8chungachguk писал(а):Это что за зверь?anton44eg писал(а): тут у вас race condition
Re: Наследование REST ACTION
anton44eg, спасибо за информацию. Метод заменил в соответствии с updateCounters.
Re: Наследование REST ACTION
Опять вопрос возник...Как мне отдать related count в этом экшне?
При запросе поля "comments" нет. Пытался определить в модели свойство commentscount - все равно не работает
Код: Выделить всё
// view action
public function actionView($id)
{
$model = News::findOne($id);
$model->updateCounters(['hits' => 1]);
$model->commentsCount = $model->getCommentsCount();
return $model;
}
// model relation
public function getCommentsCount()
{
// news has_many comments via comments.news_id -> id
return $this->hasMany(Comments::className(), ['news_id' => 'id'])->count();
}
Re: Наследование REST ACTION
fields, extrafields
Re: Наследование REST ACTION
Код: Выделить всё
public function fields()
{
$fields=parent::fields();
unset($fields['date_created'],$fields['date_updated'],$fields['show']);
array_push($fields,'commentsCount');
return $fields;
}