2012-08-28 6 views
1

나는 완벽하게 작동하는이 코드를 작성했습니다. 내가 변경할 수없는 유일한 것은 기본 콜백 오류 메시지입니다 "const INVALID_VALUE = 'callbackValue';" Zend_Validate_Callback에.Zend_Validate_Callback은 self :: INVALID_VALUE 메시지를 덮어 씁니다.

$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(); 
} 

아이디어가 있으십니까?

답변

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) 
} 

더 읽기 여기

+0

, 나는 메시지의 키를 변경하는 오해하지 않으되지 않습니다 , 나는 기본값을 변경하려면

$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(); } 
: 보호 $ _messageTemplates = 배열 ​​( self :: INVALID_VALUE => " '% value %'이 (가) 유효하지 않습니다.", self :: INVALID_CALLBACK => "콜백 내에서 예외가 발생했습니다.", ); – ibram

1

는 ZF 소스 코드에보고 한 후 내 질문에 대한 답을 찾을 수 http://zfdoc.hafees.com/class/Zend_Validate_Callback.html#class,Zend_Validate_Callback, 당신은, 배열 기반 구조 "메시지"에 열중하고 있었다 옵션을 자사의 메시지를 덮어 쓸 수 없습니다 Zend_Validate_Callback의 생성자. Zend_Validate_Abstract에는 콜백 오류 메시지를 멋지게 덮어 쓰는 "setMessages"공용 메서드가 있습니다.

최종 코드 :