根据当前值有条件地设置Zend Form选择元素多选项

时间:2011-03-22 00:57:26

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

目前我正在尝试在Zend框架中构建一个Web应用程序。

但我无法弄清楚如何在我的系统中管理状态

例如,我在系统中的报价处理状态具有以下状态

Awaiting for Confirmation
Asssigned
In Progress
Completed
Mark As Spam

我将这些值存储在一个名为ProviderQuoteStatus的表中,并在zend_db类中创建了一个名为ProviderQuoteStatus()的函数,并使用该函数在zend form下拉框中生成状态值。

   $select = $this->select()->from("providerQuoteStatus",
            array('key' => 'providerQuoteStatusId',
                'value' => 'providerQuoteStatusName'));

   $result = $this->fetchAll($select);

return $result->toArray();

这是我的Zend表单代码

 $serviceType = new Application_Model_DbTable_ProviderQuoteStatus();

 $serviceTypeValues = $serviceType->getProviderQuoteStatusFormValues();

 $dropDownElement = new Zend_Form_Element_Select('providerQuoteStatus');

 $dropDownElement->addMultiOptions($serviceTypeValues);

直到这个阶段一切正常。如果Asssigned Stage I中的引用仅希望提供者选择以下选项

Asssigned
In Progress
Completed

如何在Zend表单下拉框中删除“等待确认”和“标记为垃圾邮件”值?

我应该在哪里存储所有这些业务逻辑(例如,如果Assigned Stage中的报价只能有Assigned,In Progress选项等)?在Model DB类中?

提前非常感谢:D

1 个答案:

答案 0 :(得分:0)

您可以使用$ form-init()中的所有可能选项填充select元素,就像您正在做的那样。但是在$form->setDefaults($defaults)期间修改元素,此时你将知道元素的当前值并确定哪些选项不再合适:如果元素值是“Assigned”,则删除“Awaiting”和“垃圾邮件“选项。