Logische Elemente

11. Jan 2008

Wer kennt das Problem nicht, da hat man endlich rausgefunden, dass man bei CakePHP mit Elementen Teil-Ansichten (bei Rails partial-views) erstellen kann und steht nun vor dem Problem, dass man irgendwie in die Datei noch Programmlogik reinbringen will. HTML Codeblöcke sind immer nur so gut wie die Logik dahinter. Da es sich bei Elementen allerdings um eine Art View handelt, ist laut MVC-Prinzip Programmlogik oder gar Datenbankkommunikation im View nicht erlaubt (obwohl mit etwas Frickelei in PHP durchaus möglich).

Die Lösung:
/views/elements/mein_element.ctp

  1. <?php $ausgabe_array = $this->requestAction(‘/controller/action’);?>
  2. <p>mein HTML Code und vieles mehr</p>

Durch diese wirklich simple Lösung kann man sich jede Funktion in das Element holen und dort für den User aufbereiten.
Einen kleinen Fallstrick gilt es allerdings noch zu umgehen:
Nach meiner Erfahrung (wenn es anders ist, bitte in den Kommentaren posten) muss bei requestAction die benannte Funktion ein return value besitzen. Im Beispiel könnte die Funktion so aussehen:

  1. function view() {
  2.   $alles = $this->Model->findAll();
  3.   return $alles;
  4. }

Nun kann man auf den Rückgabewert $alles als $ausgabe_array im Element zugreifen und die tollsten Sachen machen.

Kategorie: CakePHP, Tipps | 3 Kommentare »


Veröffentlicht am Freitag, den 11. Januar 2008 um 09:41 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

3 Reaktionen zu “Logische Elemente”

 

  1. Chris Am 11. Januar 2008 um 11:29 Uhr

    Top! Danke das du meine Problematik aufgegriffen hast, ich denke jetzt habe ich Elemente besser verstanden, vorallem weiß ich nun wie ich die Programmlogik da rein bekomme und, dass ich mit return die Werte übergeben muss (mit “set” hats bei mir nämlich nie funktioniert).

  2. dievo Am 11. Januar 2008 um 11:34 Uhr

    :-) Ich helfe doch gerne (hatte allerdings gestern auch genau das Problem mit einer dynamischen Navigation, von daher nicht ganz uneigennützig)

  3. paul Am 9. Februar 2008 um 18:54 Uhr

    funktioniert

    &this->set(‘variable’, $this->requestAction(‘/controller/action’));

    im controller denn nicht?

Einen Kommentar schreiben

Du mußt angemeldet sein, um kommentieren zu können.