需要一个仅存储值的 Zend_Form_Element

发布于 2024-11-30 07:44:24 字数 932 浏览 1 评论 0原文

我有一系列用于选择列表的选项。

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

但如果我只有一个选择,我宁愿想要:

  1. 一个隐藏的 ,其验证器要求发布的值为 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。任何人都可以更改隐藏值,从而允许他们注入无效值。这是可接受的。

帮助?

I have an array of options for a select list.

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

But if I only have one option, I rather want either:

  1. A hidden <input type="hidden" name="opt" value="2"/> with a validator requiring the posted value to be 2

  2. No output. The value will only be stored in the form_element/form until requested by $form->getValues()

This code is a non-working example of what I want: ($this is a Zend_Form object)

$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 ));

However, the value will not validate to $first_val. Anyone may change the hidden value, allowing them to inject invalid values. This is not acceptable.

Help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时间你老了 2024-12-07 07:44:24

您的代码缺少验证器,例如 Zend_Validate_Identical

your code is missing a validator, e.g. Zend_Validate_Identical

死开点丶别碍眼 2024-12-07 07:44:24

我创建了一个自定义 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);
    }
}
?>

I created a custom Zend_Form_Element that does exactly what I want. Maybe someone else might find it useful:

<?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);
    }
}
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文