【问题标题】:Fatal Error: call to member function addMultiOptions() on a non object in zend致命错误:在 zend 中的非对象上调用成员函数 addMultiOptions()
【发布时间】:2012-10-12 05:08:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    尝试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);
    }
    

    它将检查元素是否存在以及它是否是一个对象。

    【讨论】:

    • 它说它是一个对象。如果它不为此表单元素创建对象,我该如何克服这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 2012-05-30
    • 2016-08-30
    • 2015-02-06
    • 2012-05-14
    • 2013-11-19
    • 2017-04-30
    • 2015-04-13
    相关资源
    最近更新 更多