2011-03-21 25 views
0

創建Zend_Validate的對象我有這樣的一個Zend_Forminit方法:從一個數組

$username_validators = array(
    'Alpha', 
    array('StringLength', false, array(3, 20)), 
); 

$some_form->addElement('text', 'username', array(
    'filters' => array('StringTrim', 'StringToLower'), 
    'validators' => $username_validators, 
    'required' => true, 
    'label'  => 'Username:', 
)); 

是否有可能創建一個加載相同validators數組,我傳遞一個addElement對象Zend_Validate?這將是這樣的:

$v = new Zend_Validate(); 
//this is the part I'm unsure. Zend_Validate doesn't have an addValidators method. 
$v->addValidators($username_validators); 
echo $v->isValid('testuser1'); 

回答

1

當然,你可以從一個成員變量添加驗證的集合,只要他們不要求必須在實例中指定的任何動態選項。

編輯

看來,我認爲,開箱即用,你不能做類似的事情。 Zend_Form有一個插件加載器/註冊表,使您可以使用「簡短形式」驗證器。插件加載器配置了路徑和類前綴,使其能夠從短格式和任何提供的驗證器選項中真正創建驗證器實例。

相反,代碼Zend_Validate::addValidator()似乎實際上需要一個實際驗證程序實例

但它看起來像你可以種上這種形式/元素註冊表搭載如下:創建一個表單元素,分配短形式驗證的元素,該元素上調用getValidators()Zend_Form_Element::getValidators()似乎每個短形式驗證轉化成一個真實的實例),然後將這些驗證器一次一個送入Zend_Validate。似乎很漫長,但它應該工作。

+0

我不知道這是如何回答我的問題..我如何告訴我的'$ v'對象是從任意'$ username_validator驗證s'陣列? – cambraca 2011-03-21 16:30:11

+0

@cambraca:你是完全正確的。我的回答完全是腦死亡,顯然需要更多的咖啡。編輯答案給予希望更接近*這個星球的東西。 ;-) – 2011-03-21 18:52:03

+0

非常感謝你!這似乎是一個想法,雖然我有點擔心內存使用(和優雅的代碼)..我想我會回去循環數組我自己和做'Zend_Validate :: is(.. )'在每一個... – cambraca 2011-03-21 22:59:23

0

是的,只要$ username_validators已被聲明並可在函數/類的範圍內訪問,就可以做你想做的事情。如果您使用的是類,你會宣佈私有變量:

private $userVariables;

然後在構造函數來填充它:

public function __construct() 
{ 
    $this->userVariables = array(
     //validator options here 
    ); 
} 

您可以現在這款單獨驗證,只要你喜歡指定多次通過調用$ this-> userVariables:

$v = new Zend_Validate(); 
$v->addValidators($this->userVariables); //this is the part I'm unsure 
echo $v->isValid('testuser1'); 
+0

我想我的問題不清楚。「addValidators」函數不存在。我只想知道如何將驗證器從數組格式轉換爲Zend_Validate對象。我剛剛編輯了我的問題.. – cambraca 2011-03-21 18:44:43