0

選択リストのオプションの配列があります。

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

しかし、選択肢が1つしかない場合は、どちらかが必要です。

  1. 投稿<input type="hidden" name="opt" value="2"/>された値が2

  2. 出力なし。値は、によって要求されるまでform_element/formにのみ保存されます$form->getValues()

このコードは、私が欲しいものの機能しない例です:( $thisZend_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。誰でも非表示の値を変更して、無効な値を挿入できるようにすることができます。これは受け入れられません。

ヘルプ?

4

2 に答える 2

2

コードにバリデーターがありません(例:Zend_Validate_Identical )

于 2011-08-19T11:57:05.900 に答える
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);
    }
}
?>
于 2011-08-19T13:10:25.083 に答える