0

ドロップダウンボックスであるフォーム要素 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);

Fatal Error: call to member function addMultiOptions() on a non object in zend 時々発生しますが、毎回ではありません。フォーム要素を追加/削除したり、キャッシュから削除したりするなど、ファイルに変更を加えた場合。このエラーが発生します。問題を追跡して修正する方法を教えてください

4

1 に答える 1

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

要素が存在するかどうか、およびそれがオブジェクトであるかどうかをチェックします。

于 2012-10-12T08:24:21.253 に答える