-
Адлан Шамавов authoredАдлан Шамавов authored
BaseRequest.php 1.54 KiB
<?php
namespace App\Requests;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\Validator\ValidatorInterface;
abstract class BaseRequest
{
public function __construct(protected ValidatorInterface $validator)
{
$this->populate();
if ($this->autoValidateRequest()) {
$this->validate();
}
}
public function validate(): void
{
$errors = $this->validator->validate($this);
$messages = ['message' => 'validation_failed', 'errors' => []];
/** @var ConstraintViolation $errors */
foreach ($errors as $message) {
$messages['errors'][] = [
'property' => $message->getPropertyPath(),
'value' => $message->getInvalidValue(),
'message' => $message->getMessage(),
];
}
if (count($messages['errors']) > 0) {
$response = new JsonResponse($messages, 201);
$response->send();
exit;
}
}
public function getRequest(): Request
{
return Request::createFromGlobals();
}
protected function populate(): void
{
foreach ($this->getRequest()->request->all() as $property => $value) {
if (property_exists($this, $property)) {
$this->{$property} = $value;
}
}
}
protected function autoValidateRequest(): bool
{
return true;
}
}