Commit 9d38d459 authored by Александр Плохих's avatar Александр Плохих 🌔
Browse files

create interfaces | create VlidationService

parent f205f644
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
<?php

namespace App\Actions;

use App\Entity\InterfaceDataEntity;

interface InterfaceAction
{
    /**
     * абстрактная функция испольняет описаный функционал в контроллере
     * @param array $array массив тела реквеста
     */
    public function act(InterfaceDataEntity $model): mixed;
}
+15 −0
Original line number Diff line number Diff line
<?php

namespace App\Entity;

use Symfony\Component\HttpFoundation\Request;

interface InterfaceDataEntity
{
    /**
     * преобразование реквеста в модель
     * @param Request $request
     * @return void
     */
    public function serialise(Request $request): void;
}
+41 −0
Original line number Diff line number Diff line
<?php

namespace App\Service;

use App\Entity\InterfaceDataEntity;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Validator\Validation;

class ValidationService
{
    /**
     * Валидирование содержимого модели согласно атрибутам парамтров
     * @param InterfaceDataEntity $model
     * @return void
     */
    public function validate(InterfaceDataEntity $model): void
    {
        $validator = Validation::createValidator();
        $errors = $validator->validate($model);

        $messages = [
            'message' => 'validation_fail',
            'errors' => [],
        ];

        foreach ($errors as $error) {
            $messages['errors'][] = [
                'property' => $error->getPropertyPath(),
                'value' => $error->getInvalidValue(),
                'message' => $error->getMessage(),
            ];
        }

        if (count($messages['errors']) > 0) {
            $response = new JsonResponse($messages, 400);
            $response->send();

            exit;
        }
    }
}
 No newline at end of file