致命错误:在zend中的非对象上调用成员函数addMultiOptions()

时间:2012-10-12 05:08:01

标签: php zend-framework zend-form fatal-error zend-form-element

我有一个表单元素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(array($ 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 Ocassionaly中的非对象上调用成员函数addMultiOptions(),但不是每次都调用。如果我在文件中做任何修改,比如添加/删除表单元素或从缓存中删除from。发生此错误。请帮助如何跟踪问题并修复它

1 个答案:

答案 0 :(得分:0)

在您对其进行操作之前,请尝试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);
}

它将检查元素存在的天气并将天气作为对象。