Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Variable aus Zend_Controller_Action nach Zend_Form übergeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Variable aus Zend_Controller_Action nach Zend_Form übergeben

    Aufgabe:
    Variable (Genauergesagt ein Array) aus dem Controller nach Zend_Form bringen.

    Gefundene Lösung1:
    Nicht wie vorgeschrieben/empfohlen von Zend die Form in die init() Methode zusammenbauen, sondern eine eigene Methode schreiben "StartUpForm".

    Dann die Formklasse erstellen, die Variable per Publicmethode ändern in Zend_Form und dann StartUpForm aufrufen und dies an die View übergeben.

    Quelle:
    http://www.carlowens.me/2010/04/pass...o-a-zend-form/

    Was gefällt daran nicht:
    Die "Konvention" bzw. die vorgeschlagene Konvention von Zend wird durchbrochen.

    Diese besagt, dass die View immer in der init() Methode zusammengebastelt wird.

    Gefundene Lösung2:

    PHP-Code:
            $form->getElement('answers')->setMultiOptions(array('adsas','dasas')); 
    Diese funktioniert jedoch nicht.

    PHP-Code:
    Array ( ) Fatal errorCall to a member function setMultiOptions() on a non-object in /var/www/projects/limebulls/surveybull/application/modules/survey/controllers/QuestionsController.php on line 37 
    Quelle:
    http://www.zfforums.com/zend-framewo....html#post5460
    __________________________________________________ ________________________________________________

    Während ich diesen Post verfasst haben, habe ich die Lösung nun gefunden.

    Da es mich über eine Stund gekostet hat, denke ich wird es einigen bestimmt weiterhelfen.


    Lösung:

    Zuerst wird im Controller Zend_Form initialisiert:

    PHP-Code:
            $form = new Survey_Form_Current(array(
                
    'answers'   =>  array('abc''abd')
                )); 
    In meinem Fall möchte ich die Variable _answers später benutzen, daher gebe ich 'answers' mit.
    Da diese ein Array beinhalten soll, gebe ich als value entsprechend array('abc', 'abd') mit.

    Jetzt zum extrem wichtigen Teil, in eurer Form muss folgendes stehen:

    PHP-Code:
    [...]
        protected 
    $_answers = array();
        
        public function 
    getAnswers() {
            return 
    $this->_answers;
        }
        
        public function 
    setAnswers($answers){
            
    $this->_answers $answers;
        }
    [...] 
    Was ich erst nach einer Stunde gefunden habe ist, dass Zend_Form bei der Initialisierung die übergebenen Variablen aus dem Controller nur korrekt übernimmt, wenn eine setter Methode gesetzt ist.

    Diese wird nämlich automatisch aufgerufen.

    Ähnlich der _init Methode der Bootstrapdateien, welche automatisch aufgerufen werden.

    Nun könnt ihr ganz normal per getter Methode auf euer Array zugreifen.

  • #2
    Ergänzung:
    Ein Problem ergibt sich bei Arrays welche aus Zend_DB_Table_Abstract durch query()->fetchAll() herauskommen.

    Der Index ist wie folgt angeordnet:

    PHP-Code:
    array([0]array([deinecolumn]=>[bla]), [1]array([deinecloumn]=>[bla])) 
    Dies kann Zend_Form nicht korrekt interpretieren bzw. interpretiert dann als Value 0 und 1.

    Dies kann in der Query vermieden werden durch einen "Fetch style":

    PHP-Code:
    [...]
    return 
    $deinequery->query()->fetchAll(PDO::FETCH_COLUMN)
    [...] 
    Damit wird aus dem schwarzen Schwanarray ein wunderhübscher weißer Schwanarray womit sich Zend_Form super arrangiert.

    Kommentar

    Lädt...
    X