First stable release of yiisoft/hydrator-validator was tagged.
The package provides a hydrator that also does validation, including raw data. It's useful when input data comes from a user, and you need to validate it and then put it into DTOs.
To use it, the object being validated must implement ValidatedInputInterface
. You can use ValidatedInputTrait
to
easily create such object. The validation rules for raw values of the object are defined with Validate
PHP attribute.
Example of object:
use Yiisoft\Hydrator\Validator\Attribute\Validate;
use Yiisoft\Hydrator\Validator\ValidatedInputInterface;
use Yiisoft\Hydrator\Validator\ValidatedInputTrait;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Required;
final class InputDto implements ValidatedInputInterface
{
use ValidatedInputTrait;
#[Email]
private string $email;
#[Validate(new Required())]
private string $name;
}
Validation result could be obtained via its getValidationResult()
method.
Validating hydrator usage example:
use Yiisoft\Hydrator\HydratorInterface;
use Yiisoft\Hydrator\Validator\ValidatingHydrator;
public function actionEdit(RequestInterface $request, ValidatingHydrator $hydrator): ResponseInterface
{
$data = $request->getParsedBody();
$inputDto = $hydrator->create(InputDto::class, $data);
if (!$inputDto->getValidationResult()->isValid()) {
// Validation didn't pass :(
}
// Everything is fine. You can use $inputDto now.
}