需要一个仅存储值的Zend_Form_Element

时间:2011-08-19 11:47:38

标签: php zend-framework zend-form zend-form-element

我有一个选择列表的选项数组。

$options = array( 1=>'Option1', 2=>... );

但如果我只有一个选项,我宁愿要么:

  1. 隐藏式<input type="hidden" name="opt" value="2"/>,其中包含验证码,要求发布的值为2

  2. 无输出。在$form->getValues()

  3. 提出请求之前,该值仅存储在form_element /表单中

    此代码是我想要的非工作示例:($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。任何人都可以更改隐藏值,允许他们注入无效值。这可以接受。

    帮助?

2 个答案:

答案 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);
    }
}
?>