У меня есть REST-controller для работы с диссертационными советами, который отнаследован от \yii\rest\ActiveController.
Помимо стандартных CRUD-операций (метод actions()), я бы хотел использовать несколько своих операций, например, прекращение деятельности диссертационного совета.
Т.е. я хочу прописать в контроллере такой action:
Код: Выделить всё
public function actionStop($id)
{
$model = $this->findModel($id);
if ($model->status === $this->modelClass::STATUS_STOPED) {
throw new UnprocessableEntityHttpException(
"Невозможно выполнить данное действие, т.к. деятельность диссертационного совета <b>$model->code</b> уже прекращена."
);
} else {
$result = $model->updateAttributes(['status' => $this->modelClass::STATUS_STOPED]);
if ($result === 0) {
throw new ServerErrorHttpException('Не удалось прекратить деятельность диссертационного совета по неизвестной причине.');
}
Yii::$app->getResponse()->setStatusCode(204);
}
}
Делаю это так:
Код: Выделить всё
protected function verbs()
{
$verbs = parent::verbs();
$verbs['stop'] = ['PUT', 'PATCH'];
return $verbs;
}
Код: Выделить всё
[
'class' => yii\rest\UrlRule::class,
'controller' => 'v1/dissertation-council',
'pluralize' => false,
'extraPatterns' => [
'PUT,PATCH <id:\d+>/stop' => 'stop',
]
]
Код: Выделить всё
$client = new \GuzzleHttp\Client();
// hostname и access-token изменены
$url = "hostname/v1/dissertation-council/1/stop?access-token=qwerty";
try {
$res = $client->request(
'PUT',
$url
);
} catch() {
...
}
Не понимаю, что я делаю не так?GuzzleHttp\Exception\ClientException
Client error: `PUT hostname/v1/dissertation-council/1/stop?access-token=qwerty` resulted in a `404 Not Found` response