2

適切に検証するための配列を取得できないようです。私の例では、すべてのミュージシャンが少なくとも 1 つの楽器を持っている必要があります ($musician->instruments は楽器の配列です)。次の方法で検証ルールを設定しようとしましたが、どのような状況でも検証するものはありません (配列に少なくとも 1 つの値がある場合を含む)。

public $validates = array(
    'name' => 'Required',
    'instruments' => 'Required'
);

B

public $validates = array(
    'name' => 'Required',
    'instruments' => array(
        array(
            'notEmpty',
            'message' => 'Required'
        )
    )
);

C でさえ検証に失敗する

Validator::add('hasAtLeastOne', function($value) {
    return true;
});

...

public $validates = array(
    'name' => 'Required',
    'instruments' => array(
        array(
            'hasAtLeastOne',
            'message' => 'Required'
        )
    )
);

配列が空の場合にバリデーターが失敗し、count($musician->instruments) >= 1 の場合に合格するように設定するにはどうすればよいですか?

4

2 に答える 2

0

これは、配列内の最初のインストゥルメントの存在をチェックします。これは、少なくとも 1 つ存在することを意味します。

public $validates = array(
    'name' => 'Required',
    'instruments.0' => 'Required',
);

これはエラーを「instruments」フィールドに関連付けないため、フォームでうまく機能させるには、コピーする必要があります。

$errors = $binding->errors();
if ($errors['instruments.0']) {
    $errors['instruments'] = $errors['instruments.0'];
    unset($errors['instruments.0']);
    $binding->errors($errors);
}

これは自明ではなく、直感的ではありませんでしたが、配列の検証を処理する最も「組み込みの」方法のようです。

于 2013-07-18T17:12:47.260 に答える