PHP code example of crtl / request-dto-resolver-bundle
1. Go to this page and download the library: Download crtl/request-dto-resolver-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
crtl / request-dto-resolver-bundle example snippets
// Uses bundle defaults for both options
#[RequestDto]
class MyDto { /* ... */ }
// Overrides strict for this DTO only
#[RequestDto(strict: false)]
class NonStrictDto { /* ... */ }
// Overrides defaultNull for this DTO only
#[RequestDto(defaultNull: true)]
class RequireAllFieldsDto { /* ... */ }
namespace App\DTO;
use Crtl\RequestDtoResolverBundle\Attribute\BodyParam;
use Crtl\RequestDtoResolverBundle\Attribute\FileParam;
use Crtl\RequestDtoResolverBundle\Attribute\HeaderParam;
use Crtl\RequestDtoResolverBundle\Attribute\QueryParam;
use Crtl\RequestDtoResolverBundle\Attribute\RouteParam;
use Crtl\RequestDtoResolverBundle\Attribute\RequestDto;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraints as Assert;
#[RequestDto]
class ExampleDto
{
#[BodyParam, Assert\NotBlank, Assert\Type("string")]
public string $someParam;
#[BodyParam, Assert\NotBlank, Assert\Type("string")]
public string $withDefaultValue = "My default value";
#[BodyParam]
public ?string $nullable;
#[FileParam, Assert\NotNull]
public ?UploadedFile $file;
#[HeaderParam("Content-Type"), Assert\NotBlank]
public string $contentType;
// Because query params are all strings by default
// we can provide a type transformer to transform its type.
// values are converted using filter_var with the corrosponding FILTER_VALIDATE_* option.
#[QueryParam(transformType: "int"), Assert\GreaterThan(18)]
public int $age;
// Or provide a custom callable to tranform type
#[
QueryParam(
name: "age",
transformType: fn(string $value) => strtolower($value)
),
Assert\GreaterThan(18)
]
public mixed $customQueryParam;
#[RouteParam, Assert\NotBlank]
public string $id;
// Nested DTOs are supported for BodyParam and QueryParam
// Do NOT use Assert\Valid here
#[BodyParam("nested")]
public ?NestedRequestDTO $nestedBodyDto;
// Optional constructor receiving the Request
// It is recommended to make the request argument nullable to support creation of DTOs from
// array data but not
namespace App\DTO;
use Crtl\RequestDtoResolverBundle\Attribute\BodyParam;
use Crtl\RequestDtoResolverBundle\Attribute\FileParam;
use Crtl\RequestDtoResolverBundle\Attribute\HeaderParam;
use Crtl\RequestDtoResolverBundle\Attribute\QueryParam;
use Crtl\RequestDtoResolverBundle\Attribute\RouteParam;
use Crtl\RequestDtoResolverBundle\Attribute\RequestDto;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraints as Assert;
#[RequestDto]
class ExampleDto
{
/**
* @var string
*/
#[BodyParam, Assert\NotBlank]
public mixed $contentType;
}
namespace App\Controller;
use App\DTO\ExampleDto;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ExampleController extends AbstractController
{
#[Route("/example", name: "example")]
public function exampleAction(ExampleDto $data): Response
{
return new Response("DTO received and validated successfully!");
}
}
namespace App\EventListener;
use Crtl\RequestDtoResolverBundle\Exception\RequestValidationException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class RequestValidationExceptionListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::EXCEPTION => ["onKernelException", 0],
];
}
public function onKernelException(ExceptionEvent $event): void
{
$exception = $event->getThrowable();
if ($exception instanceof RequestValidationException) {
$event->setResponse(new JsonResponse([
"error" => "Validation failed",
"details" => $exception->getViolations(),
], JsonResponse::HTTP_BAD_REQUEST));
}
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.