У нас есть 2 сущности. Видео и группы видео. На сервере принимаем реквест на api c данными для создания группы видео и преобразую в dto.
Код: Выделить всё
modules\video\dto\VideoGroupDto Object
(
[name] => Тест
[videos] => Array
(
[0] => Array
(
[fileHostingUrl] => url2
[videoHostingUrl] => url1
[audioTypeId] => 1
[countryId] => 1
[platformIds] => Array
(
[0] => 1
[1] => 2
)
[typeIds] => Array
(
[0] => 1
[1] => 3
)
)
[1] => Array
(
[fileHostingUrl] =>
[videoHostingUrl] =>
[audioTypeId] => 1
[countryId] => 1
[platformIds] => Array
(
[0] => 2
)
[typeIds] => Array
(
)
)
)
)
Код: Выделить всё
public function actionVideoGroup()
{
if (Yii::$app->request->isPost) {
try {
$videoGroupDto = VideoGroupDto::createFromRequest(Yii::$app->request);
print_r($videoGroupDto);
$videoCreateService = new VideoCreateService(
new VideoCanals(),
new VideoChronometries(),
new VideoFormats()
);
$videoGroupCreateService = new VideoGroupCreateService($videoCreateService);
$videoGroupCreateService->createFromDto($videoGroupDto);
} catch (ValidationException $validationException) {
return ['errors' => $validationException->getErrors()];
} catch (Exception $exception) {
return ['errors' => ['_error' => $exception->getMessage()]];
}
} else {
$dataForForm = new VideoGroupDataForFormCreateService(
new VideoAudioTypes(),
new VideoCountries(),
new VideoPlatforms(),
new VideoTypes()
);
return $dataForForm->create();
}
}
Код: Выделить всё
public function createFromDto(VideoGroupDto $videoGroupDto)
{
$transaction = Yii::$app->db->beginTransaction();
try {
$videoGroup = new VideoGroups();
$videoGroup->name = $videoGroupDto->name;
if ($videoGroup->validate()) {
if (!empty($videoGroupDto->videos) && is_array($videoGroupDto->videos)) {
$this->createAndLinkVideos($videoGroupDto->videos);
}
} else {
throw new ValidationException(
'Ошибка создания группы',
0,
null,
$videoGroup->getErrors()
);
}
$transaction->commit();
} catch (ValidationException $validationException) {
$transaction->rollBack();
throw $validationException;
} catch (Exception $exception) {
$transaction->rollBack();
throw new ValidationException(
$exception->getMessage(),
0,
null,
['errors' => $exception->getMessage()]
);
}
}
1) как правильно возвращать ошибки клиенту? (По сути возвращаться должны ошибки для группы видео + ошибки для каждого видео в виде массива примерно такого плана)
Код: Выделить всё
[
//Ошибки группы
'name' = [
'не должно быть меньше 3 символов'
],
'preview' = [
'только jpg'
],
'videos' => [
//Ошибки видео в группе
0 => [
'audioType' => 'Такого типа нет',
'platforms' => 'Не больше 3 платформ'
],
1 => [
......
]
]
]
3) Может ли метод сервис возвращать только что созданную модель, чтобы прилинковать ее к группу видео?