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(new App_Validate_ValuesNumber(App_Validate_ValuesNumber :: TOO_LESS,3))' 意味着應該選擇不小於3的值 –

1

我只是爲了今天而戰。這是一個zend錯誤。 http://framework.zend.com/issues/browse/ZF-11667。在這個問題上有一個解決方案,但是直到1.12版本纔會出現。我不想等,所以我修補了我的Zend_Form_Element。修復工程很好。在修復之前,我對MultiChecks的錯誤消息對每個檢查過的盒子重複一次。