Yii2 Rest Api Выбрасываем исключение
Вообщем у меня есть api которое я пишу на yii2, и решил дабы избавиться от лишнего кода, просто при ошибки во время проверки кидать исключение, делаю это так:
if ($ticket->tickets_left > $count_ticket) {
$ticket->tickets_left -= $count_ticket;
$hours = json_decode($ticket->schedule_minute);
foreach ($hours as $hour) {
if ($hour == (int)$order['hours']) {
if ($hour->tickets_left > $count_ticket) {
if ((int)$order['ticketsCount']['adults']) {
$total_price += ((int)$order['ticketsCount']['adults'] * $hour->price_adults);
}
if ((int)$order['ticketsCount']['students']) {
$total_price += ((int)$order['ticketsCount']['students'] * $hour->price_stud);
}
if ((int)$order['ticketsCount']['children']) {
$total_price += ((int)$order['ticketsCount']['kid'] * $hour->price_children);
}
$hour->tickets_left -= $count_ticket;
foreach ($hour->minutes as $minute) {
if ($minute->minute == (int)$order['minutes']) {
if ($minute->count_ticket_left > $count_ticket) {
$minute->count_ticket_left -= $count_ticket;
} else {
return throw new UnprocessableEntityHttpException(Yii::t('app', 'Sorry, tickets for the selected time have run out'));
}
}
}
} else {
return throw new UnprocessableEntityHttpException(Yii::t('app', 'Sorry, tickets for the selected time have run out'));
}
}
}
} else {
return throw new UnprocessableEntityHttpException(Yii::t('app', 'Sorry, tickets for the selected time have run out'));
}
Вот и вроде, всё должно работатть, но вот, что я получил в ответ через postman:
ParseError: syntax error, unexpected 'throw' (T_THROW), expecting ';' in
D:\OpenServer\domains\iBrush\teleportAdmin\api\controllers\OrderController.php:90
Stack trace:
#0 [internal function]: yii\BaseYii::autoload()
#1 [internal function]: spl_autoload_call()
#2 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\base\Module.php(643): class_exists()
#3 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\base\Module.php(602): yii\base\Module->createControllerByID()
#4 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\base\Module.php(594): yii\base\Module->createController()
#5 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Module->createController()
#6 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\web\Application.php(104): yii\base\Module->runAction()
#7 D:\OpenServer\domains\iBrush\teleportAdmin\vendor\yiisoft\yii2\base\Application.php(392): yii\web\Application->handleRequest()
#8 D:\OpenServer\domains\iBrush\teleportAdmin\web\index.php(12): yii\base\Application->run()
#9 {main}
Вообщем нужна ваша помощь.
Ответы (1 шт):
Автор решения: Moonwolf45
→ Ссылка
Вообщем всё решилось просто, убираем return для throw, а в web прописываем вот это:
'components' => [
...
'response' => [
'on beforeSend' => function (yii\base\Event $event) {
$response = $event->sender;
if (404 === $response->statusCode && is_array($response->data)) {
$response->data['code'] = $response->data['status'];
$response->data['status'] = 'Error';
}
},
],
...
]