Skip to content

Latest commit

 

History

History
55 lines (47 loc) · 2.55 KB

built-in-rules-stop-on-error.md

File metadata and controls

55 lines (47 loc) · 2.55 KB

StopOnError - interrompe a validação no primeiro erro

Esta regra se aplica a um grupo de regras e permite interromper a validação para todo o grupo imediatamente após ocorrer um erro em qualquer uma das regras. Isso significa que todas as regras que seguem a regra cuja validação falhou não serão executadas de jeito nenhum.

Isso pode ser útil para validações com alto desempenho, como consultas de banco de dados ou alguns cálculos complexos. A ordem das regras dentro de um grupo é crucial aqui - as regras “leves” precisam ser colocadas acima das “pesadas”:

use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;
use Yiisoft\Validator\Rule\StopOnError;
use Yiisoft\Validator\Validator;

$data = 2;
$rule = new StopOnError([
    new Length(min: 3), // "Lightweight" rule, will be run and won't pass the validation.
    new MyHeavyRule(), // "Heavy" rule, won't be run at all because of the existing error.
]);
$result = (new Validator())->validate($data, $rule);

Ao usar com outras regras e validação condicional, ele se comporta como uma única unidade. Por exemplo, com configurações padrão, ela não será ignorada se a regra anterior não passar na validação. Para alterar esse comportamento, defina $skipOnError para true. Isto permite utilizá-lo para limitar a lista de erros por atributo apenas ao primeiro (em formulários HTML, por exemplo).

$rules = [
    'attribute1' => new SimpleRule1(), // Let's say there is an error.
    // Then this rule is skipped completely with all its related rules because `skipOnError` is set to `true`. Useful
    // when all rules within `StopOnError` are heavy.
    'attribute2' => new StopOnError(
        [
            new HeavyRule1(), // Skipped.
            new HeavyRule2(), // Skipped.
        ],
        skipOnError: true,
    ),
    // This rule is not skipped because `skipOnError` is `false` by default. Useful for forcing validation and
    // limiting the errors.
    'attribute3' => new StopOnError([
        new SimpleRule2(), // Assuming there is another error.
        new SimpleRule3(), // Skipped.
    ]),
    // Skipping of other intermediate rules depends on `skipOnError` option set in these intermediate rules.
    'attribute4' => new SimpleRule4(), // Not skipped, because `skipOnError` is `false` by default.
];

Use a opção grouping / ordering / skipOnError para obter o efeito desejado.