2010-12-05 8 views
0

Zend Neuling versucht, Zend_Form zu konfigurieren und zu verwenden.Zend Form Instanziierung scheitert im weißen Bildschirm des Todes

Nur für den Rekord Ich bin auf Zend Framework Version: 1.11.1 auf Win XP mit Apache 2.etwas. Ich arbeite an einer Seite, die größtenteils gut funktioniert. (Jemand hat es angefangen. Ich muss es verlängern).

Ich habe Probleme im Bereich der Formulare und versuche, Zend_Form in der Hoffnung einzuführen, dass dies die Dinge irgendwie vereinfachen wird. Aber der Versuch, Zend_Form zu benutzen, hat eigene Probleme.

Wenn ich versuche, das erste Testformular zu instanziieren, bekomme ich den weißen Bildschirm des Todes - ohne auch nur eine Fehlermeldung.

Daten wie folgt:

Dir Structure: 
MYAPPNAME 
....controllers 
....forms 
....models 
....services 
....views 

Bootstrap.php enthält:

protected function _initAutoLoading() 
{ 
$loader = new Zend_Loader_Autoloader_Resource(array(
'namespace' => 'MYAPPNAME', 
'basePath' => APPLICATION_PATH . '/modules/MYAPPNAME', 
)); 
$loader->addResourceTypes(array(
    'model' => array(
'path' => 'models', 
'namespace' => 'Model'), 
    'form' => array(
'path' => 'forms', 
'namespace' => 'Form'), 
    'service' => array(
'path' => 'services', 
'namespace' => 'Service'))); 
} 

Dies funktioniert gut für Modelle mit Namen wie:

class MYAPPNAME_Model_DataRecordName extends Doctrine_Record 
{ 
etc... 

Aber es scheint kläglich zu Versagen für Formulare ... auch wenn es dich betrifft, dies ist mein erster Durchlauf bei der Verwendung von Zend_Form.

ist meine Form definiert in der Datei MYAPPNAME/forms/Formtest.php:

<?php 

class MYAPPNAME_Form_Formtest extends Zend_Form 
{ 
public function init($action){ 

    $this->setAction($action) 
    ->setMethod('post') 
    ->setAttrib('id', 'formtestForm'); 

    $email = $this->addElement('text', 'email', 
    array('label', => 'EMail')); 
) 

    $submit = $this->addElement('submit', 'Submit and Be Free!'); 
}// End init 
} // End class def 

Die Form, in einer Ansicht angezeigt wird wie folgt definiert:

<div class=""testForm"> 
<p style="margin-top:20px; margin-bottom:10px"">Explanatory Text</p> 
<h2>This is a Form Test</h2> 

<?php echo $this->formResponse; ?> 
<?php echo $this->form; ?> 

<hr> 
<p>FORM ABOVE THIS BAR</p> 
</div> 

Die Ansicht funktioniert gut.

Es durch eine Aktion (in einem Arbeits Controller), definiert als verwaltet wird:

public function formtestAction(){ 
    echo "formtestAction: ENTERED"; 

    $form = new MYAPPNAME_Form_Formtest('ThisController/formtest2');  
    //$form = "<p>GARBAGE DATA</p>"; 

    if(!empty($form)){$this->view->form = $form;} 
    else{ 
    $form = "<p>THE FORM VAR IS EMPTY</p>"; 
    $this->view->form = $form; 

    $formResponse = "<p>INSTANTIATION FAILED</p>"; 
    $this->view->formResponse = $formResponse; 
    } 
} 
public function formtest2Action(){ 
    echo "formtest2Action: ENTERED"; 
} 

Wenn ich kommentieren Sie sowohl die Form Instanziierung und die Mülldatenleitungen, erhalte ich gültige Ausgabe in der Ansicht. Wenn ich $ form auf "GARBAGE DATA" setze, bekomme ich auch eine gültige vorhersagbare Ausgabe.

Allerdings, wenn ich versuche, das Formular Objekt zu instanziiert bekomme ich den weißen Bildschirm des Todes nur mit „formtestAction: Eingegebene“ (. Aus der Echo-Anweisung am Anfang)

ich langsam verrückt würde.

Ich kann nicht herausfinden, ob dies ein Autoloader-Problem, ein Routing-Problem, ein Objekt Instanziierung Problem oder was ist.

Ich wäre sehr für einen Ratschlag verpflichtet.

Danke fürs Lesen.

+0

Haben Sie Ihre PHP-Protokolle überprüft? Wenn Sie einen schwerwiegenden PHP-Fehler bekommen, haben Sie sehr wahrscheinlich einen leeren Bildschirm. Außerdem werden schwerwiegende Fehler nicht in Ihrem Anwendungsprotokoll landen (wie dies bei nicht abgefangenen Ausnahmen der Fall ist), sie werden direkt zum PHP-Protokoll weitergeleitet. – Vika

Antwort

1

Mit Zends habe ich das mehrere Male, und es ist in der Regel etwas lästig wie ein überflüssiges Komma. In

... 'basePath' => APPLICATION_PATH. '/ modules/MYAPPNAME',));

es sieht genauso aus wie auf denen. Nur ein kurzer Blick, aber Sie könnten es trotzdem überprüfen.

HTH, Marcus

+0

Könnten Sie meinen Beitrag als Antwort akzeptieren (für unsere interne Reputationhunt);) Grüße, –

0

mtoepper: Ganz in der Nähe. Guter Fang!

Es war in der Tat ein zusätzliches Komma, nur war es in der Form-Klasse Definition - verhindert erfolgreiche Objekt Instanziierung.

Diese stillen Fehler sind sehr nervig.