0

最小量と最大量の2つのテキストフィールドを持つフォームがあります。Zendformのバリデーターを使用して、テキストフィールド「 minimum-amount」の値とテキストフィールド「maximum-amount 」の値を比較できるかどうか、またはその逆が可能かどうかを知りたいです。

4

2 に答える 2

3

そのためのカスタム検証を作成する必要があります。

この投稿の関数はMy_Validate_FieldCompareに役立つと思います。

于 2013-02-21T07:35:26.493 に答える
1

独自のバリデーターを作成するだけで、バリデーターの isValid メソッドは、バリデーターがアタッチされているフィールドの値と、フォームのコンテキスト全体 (他のすべてのフォーム フィールドの値の配列) を取得します。さらに、バリデーターに関数を追加してコンテキストフィールドを設定し、それが小さい、等しい、大きい、または比較する関数を渡す必要がある場合...

ここにいくつかのサンプルコード(テストされていません)

<?php

namespace My\Validator;

class MinMaxComp extends AbstractValidator
{
    const ERROR_NOT_SMALLER = 'not_smaller';
    const ERROR_NOT_GREATER = 'not_greater';
    const ERROR_CONFIG = 'wrong_config';

    const TYPE_SMALLER = 0;
    const TYPE_GREATER = 1;

    protected $messageTemplates = array(
        self::ERROR_NOT_SMALLER => "Blah",
        self::ERROR_NOT_GREATER => "Blah",
        self::WRONG_CONFIG => "Blah",
    );

    protected $type;
    protected $contextField;

    public function setType($type)
    {
        $this->type = $type;
    }

    public function setContextField($fieldName)
    {
        $this->contextField = $fieldName;
    }

    public function isValid($value, $context = null)
    {
        $this->setValue($value);

        if (!is_array($context) || !isset($context[$this->contextField])) {

            return false;
        }

        if ($this->type === self::TYPE_SMALLER) {

            if (!$result = ($value < $context[$this->contextField])) {

                $this->error(self::ERROR_NOT_SMALLER);
            }

        } else if ($this->type === self::TYPE_GREATER) {

            if (!$result = ($value > $context[$this->contextField])) {

                $this->error(self::ERROR_NOT_GREATER);
            }

        } else {

            $result = false;
            $this->error(self::ERROR_CONFIG);
        }

        return $result;
    }
}
于 2013-02-21T07:35:42.070 に答える