2024-02-02 867次浏览

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.    
}