我有一个选择列表的选项数组。
$options = array( 1=>'Option1', 2=>... );
但如果我只有一个选项,我宁愿要么:
隐藏式<input type="hidden" name="opt" value="2"/>
,其中包含验证码,要求发布的值为2
无输出。在$form->getValues()
此代码是我想要的非工作示例:($this
是Zend_Form对象)
$first_val = reset(array_keys($options));
if( count($options) > 1 )
$this->addElement('select', 'opt', array(
'multiOptions' => $options,
'label' => 'Options',
'value' => $first_val,
'required' => true ));
else
$this->addElement('hidden', 'opt', array(
'required' => true,
'value' => $first_val ));
但是,该值不会验证$first_val
。任何人都可以更改隐藏值,允许他们注入无效值。这不可以接受。
帮助?
答案 0 :(得分:2)
您的代码缺少验证器,例如Zend_Validate_Identical
答案 1 :(得分:2)
我创建了一个自定义Zend_Form_Element,它完全符合我的要求。也许别人可能觉得它很有用:
<?php
require_once 'Zend/Form/Element.php';
/**
* Class that will automatically validate against currently set value.
*/
class myApp_Element_Stored extends Zend_Form_Element
{
/**
* Use formHidden view helper by default
* @var string
*/
public $helper = 'formHidden';
/**
* Locks the current value for validation
*/
public function lockValue()
{
$this->addValidator('Identical', true, (string)$this->getValue());
return $this;
}
public function isValid($value, $context = null)
{
$this->lockValue();
return parent::isValid($value, $context);
}
}
?>