你好,我有一个表单,用户可以点击一个按钮并以动态方式添加新元素(使用Jquery)
<input name="sconto[]" type="text"><br>
<input name="sconto[]" type="text"><br>
<input name="sconto[]" type="text"><br>
...
我有一个浮点数的自定义验证器,格式为逗号和点分隔,如20.50和20,50 问题是我似乎无法找到如何使zend将它应用于数组的每个元素。
那么我应该如何声明这个元素以及如何应用验证器?的xD
这是我的验证器
protected $_messageTemplates = array(
self::NON_E_NUMERO => 'non sembra essere un numero'
);
public function isValid($value, $context = null)
{
$pos_virgola = strpos($value, ",");
if ($pos_virgola !== false)
$value = str_replace(",", ".", $value);
if (!is_numeric($value))
{
$this->_error(self::NON_E_NUMERO, $value);
return false;
}
else
return true;
}
}
表格我不知道该怎么做,我使用这个,但显然它不起作用
$sconto = $this->createElement('text','sconto')->setLabel('sconto');
//->setValidators(array(new Gestionale_Validator_Float()));
$this->addElement($sconto);
...
$sconto->setDecorators(array(//no ViewHelper
'Errors',
'Description',
array(array('data' => 'HtmlTag'), array('tag' => 'td', /*'class' => 'valore_campo', */'id'=>'sconto')),
array('TdLabel', array('placement' => 'prepend', 'class' => 'nome_campo'))
));
答案 0 :(得分:1)
如果Marcin评论不是您想要做的,那么这是另一种创建多文本元素的方法。
创建自定义装饰器“My_Form_Decorator_MultiText”。您需要注册自定义装饰器类。阅读Zend Framework doc以获取详细信息http://framework.zend.com/manual/en/zend.form.decorators.html
类My_Form_Decorator_MultiText扩展Zend_Form_Decorator_Abstract {
public function render($content) {
$element = $this->getElement();
if (!$element instanceof Zend_Form_Element_Text) {
return $content;
}
$view = $element->getView();
if (!$view instanceof Zend_View_Interface) {
return $content;
}
$values = $element->getValue();
$name = $element->getFullyQualifiedName();
$html = '';
if (is_array($values)) {
foreach ($values as $value) {
$html .= $view->formText($name, $value);
}
} else {
$html = $view->formText($name, $values);
}
switch ($this->getPlacement()) {
case self::PREPEND:
return $html . $this->getSeparator() . $content;
case self::APPEND:
default:
return $content . $this->getSeparator() . $html;
}
}
}
现在验证类将验证每个元素值
class My_Validate_Test扩展Zend_Validate_Abstract { const NON_E_NUMERO ='numero'; protected $ _messageTemplates = array( self :: NON_E_NUMERO =&gt; 'non sembra essere un numero' );
public function isValid($value, $context = null) {
if (!is_numeric($value)) {
$this->_error(self::NON_E_NUMERO, $value);
return false;
}
else
return true;
}
}
这是您可以使用新装饰器
$element = new Zend_Form_Element_Text('sconto', array(
'validators' => array(
new My_Validate_Test(),
),
'decorators' => array(
'MultiText', // new decorator
'Label',
'Errors',
'Description',
array('HtmlTag', array('tag' => 'dl',))
),
'label' => 'sconto',
'isArray' => true // must be true
));
$this->addElement($element);
希望这有帮助