3

ここで私は再び簡単な質問です。Zend MultiCheckbox:最大選択を設定してください

ユーザーが選択できるボックスに最大値を設定する既存のzendバリデーターがありますか? 私は彼らに3つ以上のボックスを選択させたくありません。

私はウェブを検索しましたが、唯一見つかったのは、フォーム要素のisValid関数でエラーを設定することでした。しかし、それから、選択したボックスごとにエラーが表示されるという問題があります。 (だから4回以上)誰かがこの問題に対処する方法を知っていますか?このエラーを一度しか表示できない場合は、私の問題も解決されます。

ありがとうございます。

+0

おそらくそれをグループ化し、すぐに自分で書き込むグループのバリデータを追加します。各要素の代わりにグループのエラーを表示します。 – hakre

答えて

3

私のバリデーターを使用すると、値の数をチェックします。

<?php 
class App_Validate_ValuesNumber extends Zend_Validate_Abstract 
{ 
    const TOO_LESS = 'tooLess'; 
    const TOO_MUCH = 'tooMuch'; 

    protected $_type = null; 
    protected $_val = null; 

    /** 
    * @var array 
    */ 
    protected $_messageTemplates = array(
     self::TOO_LESS => "At least %num% values required", 
     self::TOO_MUCH => "Not more then %num% required", 
    ); 

    /** 
    * @var array 
    */ 
    protected $_messageVariables = array(
     'num' => '_val' 
    ); 
    /** 
    * Constructor for the integer validator 
    * 
    * @param string $type Comparison type, that should be used 
    *      TOO_LESS means that value should be greater then items number 
    *      TOO_MUCH means opposite 
    * @param int $val Value to compare items number with 
    */ 
    public function __construct($type, $val) 
    { 
     $this->_type = $type; 
     $this->_val = $val; 
    } 

    /** 
    * Defined by Zend_Validate_Interface 
    * 
    * Returns true if and only if $value is a valid integer 
    * 
    * @param string|integer $value 
    * @return boolean 
    */ 
    public function isValid($value) 
    { 
     // Value shoul dbe greated 
     if ($this->_type == self::TOO_LESS) { 
      if (count($value) < $this->_val) { 
       $this->_error(self::TOO_LESS); 
       return false; 
      } 
     } 

     // Value should be less 
     if ($this->_type == self::TOO_MUCH) { 
      if (count($value) > $this->_val) { 
       $this->_error(self::TOO_MUCH); 
       return false; 
      } 
     } 
     return true; 
    } 
} 
+0

自分でバリデータを書くことは、もちろん別の良い解決策です!バリデータがすべてのチェックボックスで実行されているため、いくつかの変更を行いました。したがって、$値には常に1つの値しか含まれていません。代わりに$ contextパラメータを使用して値を取得しました。 – Tim

+0

どのようにこのバリデータを呼び出しますか? – JellyBelly

+0

'$ this-> someFormElement - > - > addValidator(新しいApp_Validate_ValuesNumber(App_Validate_ValuesNumber :: TOO_LESS、3)) ' 3つ以上の値を選択する必要があることを意味します –

1

私はちょうどこの今日戦っ:複数選択で最大と選択された値の分の数を検証するために - 私は、同じ目的のために正確に使用しました。それはゼントバグです。 http://framework.zend.com/issues/browse/ZF-11667。その問題には修正がありますが、1.12が出るまでは修正されません。私はZend_Form_Elementにパッチを当てるように待たずにいました。修正プログラムは素晴らしいです。修正前に、チェックされたすべてのボックスについて、MultiCheckのエラーメッセージが1回繰り返されました。

関連する問題