Composite
permite agrupar múltiplas regras e configurar as opções de salto comuns, como skipOnEmpty
,
skipOnError
e when
, para todo o conjunto apenas uma vez ao invés de repeti-los em cada regra:
use Yiisoft\Validator\Rule\Composite;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
new Composite(
[
new Length(max: 255),
new Email(),
],
skipOnEmpty: true,
);
Composite
é uma das poucas regras integradas que não é final
. Isso significa que você pode estendê-lo e substituir o
método getRules()
para criar um conjunto reutilizável de regras:
use Yiisoft\Validator\Rule\Composite;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Regex;
final class UsernameRuleSet extends Composite
{
public function getRules(): array
{
return [
new Length(min: 2, max: 20),
new Regex('~^[a-z_\-]*$~i'),
];
}
}
E use-o como uma única regra regular:
use Yiisoft\Validator\Validator;
$result = (new Validator())->validate('John', new UsernameRuleSet());
Também pode ser combinado com a regra Nested
para reutilizar regras para vários atributos:
use Yiisoft\Validator\Rule\Composite;
use Yiisoft\Validator\Rule\Nested;
use Yiisoft\Validator\Rule\Number;
final class CoordinatesRuleSet extends Composite
{
public function getRules(): array
{
return [
new Nested(
'latitude' => new Number(min: -90, max: 90),
'longitude' => new Number(min: -90, max: 90),
),
];
}
}
Até mesmo o problema de reutilizar apenas uma regra com os mesmos argumentos pode ser resolvido com Composite
:
use Yiisoft\Validator\Rule\Composite;
use Yiisoft\Validator\Rule\Number;
final class ChartCoordinateRuleSet extends Composite
{
public function getRules(): array
{
return [new Number(min: -10, max: 10)];
}
}