Sequentially ¶
This constraint allows you to apply a set of rules that should be validated step-by-step, allowing to interrupt the validation once the first violation is raised.
As an alternative in situations Sequentially
cannot solve, you may consider
using GroupSequence which allows more control.
Applies to | property or method |
Class | Sequentially |
Validator | SequentiallyValidator |
Basic Usage ¶
Suppose that you have a Place
object with an $address
property which
must match the following requirements:
- it's a non-blank stringそれは空白でない文字列です
- of at least 10 chars long少なくとも 10 文字の長さ
- with a specific format特定の形式で
- and geolocalizable using an external service外部サービスを使用してジオローカライズ可能
In such situations, you may encounter three issues:
- the
Length
orRegex
constraints may fail hard with a UnexpectedValueException exception if the actual value is not a string, as enforced byType
.Type によって強制されるように、実際の値が文字列でない場合、Length または Regex 制約は UnexpectedValueExceptionexception で失敗する可能性があります。 - you may end with multiple error messages for the same property.同じプロパティに対して複数のエラー メッセージが表示される場合があります。
- you may perform a useless and heavy external call to geolocalize the address,
while the format isn't valid.形式が有効でない場合、アドレスをジオローカライズするために無駄で重い外部呼び出しを実行する可能性があります。
You can validate each of these constraints sequentially to solve these issues:
-
Attributes
属性
-
YAML
YAML
-
XML
XML
-
PHP
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// src/Localization/Place.php
namespace App\Localization;
use App\Validator\Constraints as AcmeAssert;
use Symfony\Component\Validator\Constraints as Assert;
// IMPORTANT: nested attributes requires PHP 8.1 or higher
class Place
{
#[Assert\Sequentially([
new Assert\NotNull,
new Assert\Type('string'),
new Assert\Length(min: 10),
new Assert\Regex(Place::ADDRESS_REGEX),
new AcmeAssert\Geolocalizable,
])]
public $address;
}
|
Options ¶
constraints
¶
type: array
[default option]
This required option is the array of validation constraints that you want to apply sequentially.
groups
¶
type: array
| string
It defines the validation group or groups of this constraint. Read more about validation groups.
payload
¶
type: mixed
default: null
This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.
For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.