【问题标题】:Zend form populate function not working for select type of elementZend 表单填充功能不适用于选择类型的元素
【发布时间】:2012-04-10 12:37:13
【问题描述】:

我将一个zend表单设置为:

class Application_Form_Ticket_Search extends Zend_Form
{
    private $_itemList;

    public function setItemList($itemList)
    {
        $this->_itemList[0] = 'Select Item';      // Default selected value
        foreach($itemList AS $key => $value)
        {
            $this->_itemList[$value['REFERENCE']] = $value['DESCRIPTION'];
        }
    }

    // Initializes search form
    public function init()
    {           
        // Settings POST type request
        $this->setName('search')->setMethod('GET');        

        $this->addElement('select', 'item',
                array(  'label'     =>    'Item',
                        'filters'   =>    array('StringTrim'),
                        'multiOptions' => $this->_itemList
        ))->removeDecorator('HtmlTag');

        $this->addElement('submit', 'search',
                array(  'class'     =>    'btn btn-primary btn-small',
                        'label'     =>    'Search',
                        'style'     =>    'margin-left:70px;')
        )->removeDecorator('HtmlTag');        
    }    
}

并且在控制器中传递表单的选择框列表为:

$searchForm = new Application_Form_Ticket_Search(array('itemList' => $itemList));

并填充值(在发出搜索请求后),例如:

$searchForm->populate($filters);

当我调试 $filters 数组时,输出是:

array(1) { ["item"]=> string(36) "201031999999992010051000000170430719" } 

现在问题出在 HTML 上:我收到了一个输出(当在下拉列表中选择了一个值时):

<select name="item" id="item">
<option value="0" label="Select Item">Select Item</option>
<option value="201031999999992010051000000170430719" label="ELITE FRT CHWG N/AV GUM ST 15CT" selected="selected">ELITE FRT CHWG N/AV GUM ST 15CT</option>
<option value="201031999999992010051000000170430869" label="Consolidator" selected="selected">Consolidator</option>
<option value="201031999999992010051100000170450719" label="DAVID PUMPKIN SEEDS" selected="selected">DAVID PUMPKIN SEEDS</option>
<option value="201031999999992010051100000170450739" label="Consolidator" selected="selected">Consolidator</option>
<option value="201031999999992010051000000170430809" label="GARDETTO ORIGINAL" selected="selected">GARDETTO ORIGINAL</option>

现在您可以看到在下拉列表中选择了每个值,并且我总是得到最后选择的值。 我做错了什么或可以为此做些什么?

【问题讨论】:

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


    【解决方案1】:

    试试:

    class Application_Form_Ticket_Search extends Zend_Form
    {
        public function setItemList($itemList)
        {
            $items = array('Select Item');      
            foreach($itemList as $key => $value) {
                $items[$value['REFERENCE']] = $value['DESCRIPTION'];
            }
            $this->getElement('item')->setMultiOptions($items);
        }
    
        // Initializes search form
        public function init()
        {           
            // Settings POST type request
            $this->setName('search')->setMethod('GET');        
    
            $this->addElement('select', 'item',
                    array(  'label'     =>    'Item',
                            'filters'   =>    array('StringTrim')
            ))->removeDecorator('HtmlTag');
    
            $this->addElement('submit', 'search',
                    array(  'class'     =>    'btn btn-primary btn-small',
                            'label'     =>    'Search',
                            'style'     =>    'margin-left:70px;')
            )->removeDecorator('HtmlTag');        
        }    
    }
    
    $searchForm = new Application_Form_Ticket_Search();
    $searchForm->setItemList(array('itemList' => $itemList));
    

    【讨论】:

    • 它没有任何区别:(类似的结果。所有下拉值都被选中...
    • 它应该可以工作。删除 $searchForm-&gt;populate($filters); 后会得到什么?是否选择了“选择项目”选项。其次,尝试将默认选项从array('Select Item'); 更改为array('DEFAULT_VALUE', 'Select Item');,第三,尝试设置特定值$form-&gt;getElement('item')-&gt;setValue('example_value'); 然后$form-&gt;populate(array('item' =&gt; 'example_value'));
    • 我按照你说的做了。删除 $searchForm-&gt;populate($filters); 后选择了“选择项目”选项。我将array('Select Item') 更改为array('DEFAULT_VALUE','Select Item')。我认为你在这里犯了一个错误。它 shud b array('DEFAULT_VALUE'=&gt;'Select Item').Bcoz 你的方法在下拉列表中添加了 1 个字段作为 DEFAULT_VALUE。 $form-&gt;getElement('item')-&gt;setValue('example_value'); 只是为了测试呐?但它也不适用于setValue('201031999999992010051100000170450719')。我认为价值的长度令人讨厌。 bcoz 如果我不给它一切都很好,下拉列表中有 0,1,2,3,4 值
    • 是的,那是错字。是的$form-&gt;getElement('item')-&gt;setValue('PUT_YOUR_VALUE_HERE'); 只是为了测试。如果您认为问题在于值的长度,请从 10 个字符长的值开始,然后是 15 个字符,依此类推。如果这是问题所在,那么它是 zf 中的一个错误,因此您需要将其归档到 bug tracker
    • BullfrogBlues :我检查了 setValue 甚至设置了 45 个字符长的下拉值,所以 ZF 似乎在处理这些事情 :) ;p 但问题是,为什么它选择所有值。我认为它现在是动态人口问题。让我搜索和探索更多...
    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多