Skip to content

Latest commit

 

History

History
90 lines (73 loc) · 2.68 KB

request-input.md

File metadata and controls

90 lines (73 loc) · 2.68 KB

Request input (Solicitar entrada)

A entrada da solicitação é um DTO que implementa RequestInputInterface:

use Yiisoft\Input\Http\AbstractInput;
use Yiisoft\Input\Http\RequestInputInterface;
use Yiisoft\Validator\Rule\Required;

final class UpdatePostInput implements RequestInputInterface 
{
    public int $id;
    public string $title;
    public string $description = '';
    public string $content;
}

Pode ser preparado para ser preenchido automaticamente a partir dos parâmetros da solicitação utilizando atributos:

use Yiisoft\Input\Http\AbstractInput;
use Yiisoft\Input\Http\Attribute\Data\FromBody;
use Yiisoft\Input\Http\RequestInputInterface;
use Yiisoft\Validator\Rule\Required;

#[FromBody]
final class UpdatePostInput implements RequestInputInterface 
{
    public int $id;
    public string $title;
    public string $description = '';
    public string $content;
}

Para obter mais opções disponíveis, consulte a seção Atributos do hydrator.

O principal conceito de entrada de solicitação é facilitar o preenchimento automático de acordo com o resolver. No entanto, também é possível usar o hydrator diretamente.

Combinando com validação

Se você precisar de recursos de validação adicionais, estenda o DTO da classe AbstractInput que também implementa ValidatedInputInterface. Desta forma você pode usar atributos de validação para propriedades:

use Yiisoft\Input\Http\Attribute\Data\FromBody

;use Yiisoft\Validator\Rule\Integer;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;
use Yiisoft\Validator\Rule\StringValue;

#[FromBody]
final class UpdatePostInput extends AbstractInput
{
    public function __construct(
        #[Required]
        #[Integer(min: 1)]
        public int $id;
        #[Required]
        #[StringValue]
        #[Length(max: 100)]
        public string $title;
        #[Length(max: 255)]
        #[StringValue]
        public string $description = '';
        #[Required]
        #[StringValue]
        public string $content;
    ) {
    }
}

Assim, ao ser preenchido, o DTO poderá ser validado imediatamente, e você poderá recuperar o resultado da validação:

use Yiisoft\Hydrator\Validator\ValidatedInputInterface;

/** @var ValidatedInputInterface $person */
$result = $person->getValidationResult();
$isValid = $result->isValid();
$errorMessagesMap = $result->getErrorMessagesIndexedByPath();

Um guia mais completo para trabalhar com o resultado da validação está disponível na documentação do validator.