2010-11-04 28 views
0

J'ai eu des problèmes pour ajouter un élément de forme zend caché.Zend_Form_Element échoue lorsque j'ajoute des éléments

lorsque j'appelle addElements le formulaire échoue et imprime l'erreur suivante à la page. mais uniquement lorsque j'essaie d'ajouter $ formContactID et $ formCustomerID.

Fatal error: Call to a member function getOrder() on a non-object in /home/coder123/public_html/wms2/library/Zend/Form.php on line 3291

Mon code est le suivant.

private function buildForm() 
{ 
    $Description = ""; 
    $FirstName = ""; 
    $LastName = ""; 
    $ContactNumber = ""; 
    $Fax = ""; 
    $Position = ""; 
    $Default = ""; 
    $custAddressID = ""; 
    $CustomerID = ""; 
    $Email = ""; 
    $ContactID = ""; 
    if($this->contactDetails != null) 
    { 
    $Description = $this->contactDetails['Description']; 
    $CustomerID = $this->contactDetails['CustomerID']; 
    $FirstName = $this->contactDetails['FirstName']; 
    $LastName = $this->contactDetails['LastName']; 
    $ContactNumber = $this->contactDetails['ContactNumber']; 
    $Position = $this->contactDetails['Position']; 
    $Fax = $this->contactDetails['Fax']; 
    $Email = $this->contactDetails['Email']; 
    $Default = $this->contactDetails['Default']; 
    $custAddressID = $this->contactDetails['custAddressID']; 
    $ContactID = $this->contactDetails['custContactID']; 
    } 


    $formfirstname = new Zend_Form_Element_Text('FirstName'); 
    $formfirstname->setValue($FirstName)->setLabel('First Name:')->setRequired(); 

    $formlastname = new Zend_Form_Element_Text('LastName'); 
    $formlastname->setLabel('Last Name:')->setValue($LastName)->setRequired(); 

    $formPhone = new Zend_Form_Element_Text('ContactNumber'); 
    $formPhone->setLabel('Phone Number:')->setValue($ContactNumber)->setRequired(); 

    $formFax = new Zend_Form_Element_Text('FaxNumber'); 
    $formFax->setLabel('Fax Number:')->setValue($Fax); 

    $FormPosition = new Zend_Form_Element_Text('Position'); 
    $FormPosition->setLabel('Contacts Position:')->setValue($Position); 

    $FormDescription = new Zend_Form_Element_Text('Description'); 
    $FormDescription->setLabel('Short Description:')->setValue($Description)->setRequired(); 

    $formEmail = new Zend_Form_Element_Text('Email'); 
    $formEmail->setLabel('Email Address:')->setValue($Email); 

    $FormDefault = new Zend_Form_Element_Checkbox('Default'); 
    $FormDefault->setValue('Default')->setLabel('Set as defualt contact for this business:'); 

    if($Default == 'Default') 
    { 
    $FormDefault->setChecked(true); 
    } 

    $formCustomerID = new Zend_Form_Element_Hidden('customerID'); 
    $formCustomerID->setValue($customerID); 
    if($this->contactID != null) 
    { 
    $formContactID = new Zend_Form_Element_Hidden('ContactID'); 
    $formContactID->setValue($this->contactID); 
    } 

// FORM SELECT 
    $formSelectAddress = new Zend_Form_Element_Select('custAddress'); 
    $pos = 0; 
    while($pos < count($this->customerAddressArray)) 
    { 
    $formSelectAddress->addMultiOption($this->customerAddressArray[$pos]['custAddressID'], $this->customerAddressArray[$pos]['Description']); 
    $pos++; 
    } 
    $formSelectAddress->setValue(array($this->contactDetails['custAddressID'])); 
    $formSelectAddress->setRequired()->setLabel('Default Address For this Contact:'); 
// END FORM SELECT 

    $this->setMethod('post'); 
    $this->setName('FormCustomerEdit'); 

    $formSubmit = new Zend_Form_Element_Submit('ContactSubmit'); 
    $formSubmit->setLabel('Save Contact'); 

    $this->setName('CustomerContactForm'); 
    $this->setMethod('post'); 


    $this->addElements(array($FormDescription, $formfirstname, $formlastname, 
     $FormPosition, $formPhone, $formFax, $FormDefault, 
     $formEmail, $formSelectAddress, $formContactID, $formCustomerID, $formSubmit)); 

    $this->addElements(array($formSubmit)); 

} 

Répondre

0

Je pense que le problème est sur $this->addElements quand $formContactID manque en raison de la règle if($this->contactID != null).

Vous pouvez mettre à jour votre code pour résoudre le problème:

..... 
$this->addElements(array($FormDescription, $formfirstname, $formlastname, 
     $FormPosition, $formPhone, $formFax, $FormDefault, 
     $formEmail, $formSelectAddress, $formCustomerID, $formSubmit)); 

if(isset($formContactID)) { 
    $this->addElements(array($formContactID)); 
} 
...... 
+0

Je reçois toujours la même erreur. aucun effet. –

+0

je peux ajouter tous les éléments sauf le type Zend_Form_Element_Hidden –

2

Peut-être que vous avez déjà fixé, mais juste au cas où.

J'avais le même problème et le problème était le nom de certains attributs dans le formulaire. Dans votre cas, vous avez:

if($this->contactID != null){ 
    $formContactID = new Zend_Form_Element_Hidden('ContactID'); 
    $formContactID->setValue($this->contactID); 
    } 

Au moment où vous avez ajouté formContactID $ à la forme d'un nouvel attribut interne a été créé pour l'objet de formulaire, ce qui est « ContactID ». Alors maintenant nous avons $ this-> ContactID et $ this-> contactID. Selon les normes PHP, cela ne devrait pas poser de problème car les clés de tableaux associatifs et les noms d'attributs d'objets sont sensibles à la casse, mais je voulais juste utiliser votre code pour illustrer le comportement de Zend Form.

Réviser le reste du code dans votre formulaire pour vérifier que vous ne surchargez aucun élément Zend. Désolé pour l'estimation, mais puisque vous n'avez pas envoyé tout le code pour le fichier de formulaire, il est un peu plus difficile à déboguer.

Merci et j'espère que ça aide.