1

私はこのコードを書きましたが、これは完全に機能します。私が変更できないのは、デフォルトのコールバック エラー メッセージ「const INVALID_VALUE = 'callbackValue';」だけです。Zend_Validate_Callback で。

$validators['ip'][] = array('Ip');
$validators['ip'][] = array('Callback', array('callback' => array($this->_ip, 'ipUnique')));
$filters = array('*' => 'StringTrim');
$input = new Zend_Filter_Input($filters, $validators, $_POST);
$input->setOptions(array('presence' => 'required')); 

if($input->isValid()){
    // all okay
}
else{
    return $input->getMessages();
}

何か案は?

4

2 に答える 2

1

ZF ソース コードを調べた後、私の質問に対する答えが見つかりました。配列ベースの構造でそのメッセージを上書きすることはできません。Zend_Validate_Callback のコンストラクタでオプション「メッセージ」が失われました。Zend_Validate_Abstract には、コールバック エラー メッセージを上書きするのにうまく機能する public メソッド "setMessages" があります。

最終的なコード:

$callbackValidator = new Zend_Validate_Callback(array($this->_ip, 'ipUnique'));
$callbackValidator->setMessages(array(Zend_Validate_Callback::INVALID_VALUE => "'%value%' is not a unique IP address"));

$validators['ip'][] = array('Ip');
$validators['ip'][] = $callbackValidator;
$filters = array('*' => 'StringTrim');
$input = new Zend_Filter_Input($filters, $validators, $_POST);
$input->setOptions(array('presence' => 'required')); 

if($input->isValid()){
    // all okay
}
else{
    return $input->getMessages();
}
于 2012-08-28T16:18:01.720 に答える
0

クラスは次のようになります。const値はソースコードからのみ変更できます。これを変更したい場合Zend_Validate_Callbackは、コードで見つけて変更してください。

class Zend_Validate_Callback extends Zend_Validate_Abstract implements Zend_Validate_Interface{
/* Constants */

const INVALID_CALLBACK="callbackInvalid"; <-- here you change the value
const INVALID_VALUE="callbackValue"; <-- here you change the value
/* Public methods defined in class */

public function __construct (string|array $callback=null)
public function getCallback ( )
public function setCallback (string|array $callback)
public function getOptions ( )
public function setOptions (mixed $options)
public function isValid (mixed $value)
/* Public methods inherited from class Zend_Validate_Abstract */

public function getMessages ( )
public function getMessageVariables ( )
public function getMessageTemplates ( )
public function setMessage (string $messageString, string $messageKey=null)
public function setMessages (Array $messages)
public function __get (string $property)
public function getErrors ( )
public function setObscureValue (bool $flag)
public function getObscureValue ( )
public function setTranslator (Zend_Translate|Zend_Translate_Adapter|null $translator=null)
public function getTranslator ( )
public function hasTranslator ( )
public static function setDefaultTranslator (Zend_Translate|Zend_Translate_Adapter|null $translator=null)
public static function getDefaultTranslator ( )
public static function hasDefaultTranslator ( )
public function setDisableTranslator (bool $flag)
public function translatorIsDisabled ( )
public static function getMessageLength ( )
public static function setMessageLength (integer $length=-1)
}

詳細はこちらhttp://zfdoc.hafees.com/class/Zend_Validate_Callback.html#class,Zend_Validate_Callback

于 2012-08-28T12:42:02.397 に答える