17

Symfony Validation を使用して配列キーを検証するにはどうすればよいですか?

次のものがあり、emails配列の各キーが ID であるとします。コールバックまたはその他の制約 (たとえば、コールバックではなく正規表現制約など) を使用してそれらを検証するにはどうすればよいですか?

$input = [
    'emails' => [
        7 => 'david@panmedia.co.nz',
        12 => 'some@email.add',
    ],
    'user' => 'bob',
    'amount' => 7,
];

use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints;
$validator = Validation::createValidator();
$constraint = new Constraints\Collection(array(
    'emails' => new Constraints\All(array(
        new Constraints\Email(),
    )),
    'user' => new Constraints\Regex('/[a-z]/i'),
    'amount' => new Constraints\Range(['min' => 5, 'max' => 10]),
));

$violations = $validator->validateValue($input, $constraint);
echo $violations;

(最新の dev-master symfony を使用)

4

4 に答える 4

-2

キー、値を反転し、バリデーターまたはカスタム バリデーターを使用するために、php 関数array_flipを使用できます。

お役に立てば幸いです。

宜しくお願いします。

于 2013-04-20T10:33:01.807 に答える
-2

少し遅れましたが、どうぞ、私の友人:

use Symfony\Component\Validator\Constraints as Assert;

public function getConstraints()
{
    return [
        'employee' => [new Assert\NotBlank(), new Assert\Type("integer")],
        'terms' => [new Assert\NotBlank(), new Assert\Type("array")],
        'pivotData' => new Assert\All([
            new Assert\Type("array"),
            new Assert\Collection([
                'amount' => new Assert\Optional(new Assert\Type('double'))
            ])
        ]),
    ];
}

ここで注目すべき点がいくつかあります。

  • 上記の例では、キーを検証していpivotDataます。はpivotData、検証したい追加データの配列である必要があります。

  • 配列を検証するたびに、 から始めますnew Assert\All。つまり、すべての配列を検証したいということです。pivotData

  • その後、 new を追加Assert\Type("array")して、配列が本当にフロントエンドから渡されたかどうかを確認します。

  • そして、最も重要なことはnew Assert\Collection、標準として、新しいプロパティを 1 つずつ定義する場所を作成することです。amount上記の例では、pivotData プロパティを表すキーを追加しました。ここにすべてのプロパティを自由にリストできます。それらは検証されます:)

幸運を :)

于 2017-10-13T08:24:29.397 に答える