我有一个表单元素companyState,它是一个下拉框。
$companyState = $this->createElement('select', 'companyState')
->addMultiOptions(
array (
'' => 'Select',
)
)
->setAttrib('id', 'companyState')
->setRequired(true)
->setAttribs(
array(
'title' => 'companyState',
'class' => 'st-select'
)
)
->removeDecorator('HtmlTag')
->removeDecorator('label');
并将表单元素作为$this->addElements(数组($companyState))传递;
在控制器中,我从表中获取companyState名称,并将其赋值给表单,如下所示
$stateListObject = ST_State_StateList::readStateListWithDetailsFromDatabase();
$stateListIterObject = new ST_State_StateListIter($stateListObject);
$stateNameArray = array();
for (; $stateListIterObject->valid(); $stateListIterObject->next()) {
$stateListObject = $stateListIterObject->current();
$stateNameArray[$stateListObject->id] = $stateListObject->state_name;
}
$companySettingsFormObject = App::getForm('Company', 'ST_CompanySettingsForm');
$obj = $companySettingsFormObject;
if (!($obj instanceof $companySettingsFormObject)) {
$companySettingsFormObject = App::getForm('Company', 'ST_CompanySettingsForm');
}
$companySettingsFormObject->getElement('companyState')->addMultiOptions($stateNameArray);
我得到了一个致命的错误:调用zend中的非对象的成员函数addMultiOptions(),但不是每次都调用。如果我在文件中做了任何修改,比如添加/删除表单元素,或者从缓存中删除。发生此错误。请帮助跟踪问题并解决它。
发布于 2012-10-12 08:24:21
在做一些事情之前,尝试die(var_dump($companySettingsFormObject))
看看$companySettingsFormObject
是否存在。
最有可能的是,由于某些原因,在这一行中没有正确地创建$companySettingsFormObject:
$companySettingsFormObject = App::getForm('Company', 'ST_CompanySettingsForm');
编辑:
或者,$companySettingsFormObject->getElement('companyState')
不是一个对象。尝试调试getElement()方法,看看它为什么不返回一个对象。
你也可以改变
$companySettingsFormObject->getElement('companyState')->addMultiOptions($stateNameArray);
至
if (isset($companySettingsFormObject->getElement('companyState')) && is_object($companySettingsFormObject->getElement('companyState'))) {
$companySettingsFormObject->getElement('companyState')->addMultiOptions($stateNameArray);
}
它将检查元素是否存在,以及它是否是一个对象。
https://stackoverflow.com/questions/12852589
复制相似问题