Нужен Zend_Form_Element, который хранит только значение - PullRequest
0 голосов
/ 19 августа 2011

У меня есть массив опций для списка выбора.

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

Но если у меня есть только одна опция, я предпочитаю либо:

  1. Скрытый<input type="hidden" name="opt" value="2"/> с валидатором, для которого объявленное значение должно быть 2

  2. Нет выходных данных.Значение будет храниться только в форме form_element / form до тех пор, пока не будет запрошено $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.Любой может изменить скрытое значение, позволяя им вводить недопустимые значения.Это не приемлемо.

Помощь?

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Я создал собственный 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);
    }
}
?>
2 голосов
/ 19 августа 2011

в вашем коде отсутствует валидатор, например Zend_Validate_Identical

...