2012-10-12 72 views
0

非對象調用到成員函數addMultiOptions()我有一個表格元件companyState其是下拉框致命錯誤:在Zend中

$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); 

我得到一個致命錯誤分配給形式:非對象上調用成員函數addMultiOptions()在zend Ocassionaly中,但不是每次。如果我在文件中進行任何修改,如添加/刪除表單元素或從緩存中刪除。發生此錯誤。請幫助如何跟蹤問題並修復它

回答

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

它會檢查渡過元素存在和天氣是一個對象。

+0

它說它的一個對象。如果它不爲這個表單元素創建一個對象,我該如何克服這個問題。 –

+0

我已經更新了一些更多建議的答案 – bogatyrjov