CakePHP: $displayField funktioniert nicht innerhalb von Plugins?!

Es existiert eine $belongsTo-Beziehung, angenommen zwischen einem Impressum und einem Buch. Das Impressum-Model wurde also entsprechend mit dem $belongsTo-Attribut beschrieben. Nun soll ein neues Impressum eines Buches angelegt werden und dafür soll bpsw. nicht der Buchname aus dem Buch-Model, sondern die ISBN-Nummer als Referenz herangezogen werden. Also bekommt das Buch-Model das Model-Attribut $displayField = ‘isbn’. Das scheint aber nicht zu funktionieren. Wenn jemand weiß warum nicht, dann bitte kommentieren! Ich freue mich auf antworten! Bis dahin kann man das natürlich umgehen, indem man das $displayField-Atribut unmittelbar vor dem Aufruf im Controller zur Laufzeit setzen lässt:

#innerhalb des impressum controller
$this->Impressum->Buch->displayField = 'isbn';
$this->set('buch',$this->Impressum->Buch->find('list');

Das Ganze findet innerhalb eines Plugins statt. Nennen wir das Plugin “Bibliothek”…Muss man hier etwas beachten?

Das erdachte Szenario möge man mir verzeihen. Es geht hier nur ums Prinzip ;-)

 

Die Lösung ist gefunden!

Näheres dazu und ergänzt um virtuelle Felder im Blog “CakePHPDoku”

6 Gedanken zu “CakePHP: $displayField funktioniert nicht innerhalb von Plugins?!

  1. Sorry für die anscheinend schlechte Beschreibung. Evtl. hier etwas besser:
    Nehmen wir statt Impressum das Vorwort (dann ist es auch sinnvoller ;-) )!

    Also im Vorwort-Model steht

    var $belongsTo = array(‘Buch’ => array(‘foreignKey’ => false, ‘conditions’ => array(‘NeuesVorwort.neues_buch_id = NeuesBuch.id’) #muss so sein, da sonst die falschen Felder miteinander verglichen würden
    ));

    Im neues_vorwort_controller steht in einer add()-Methode:

    $this->NeuesVorwort->NeuesBuch->displayField = ‘isbn’;
    $this->set(‘neuesBuchs’, $this->NeuesVorwort->NeuesBuch->find(‘list’));

    Wenn $displayField im NeuesBuch-Model gesetzt wird, dann passiert einfach gar nichts. D.h. wenn ich mir mit

    debug($this->NeuesVorwort->NeuesBuch);

    das Objekt ausgeben lassen, steht dort

    AppModel Object
    (
    [useDbConfig] => default
    [useTable] => neues_buchs
    [displayField] => name
    [id] =>
    [data] => Array

    Es scheint, als würde $displayField einfach ignoriert…was mach ich falsch?

  2. Aus der find-Methode kann man auch nur schließen, dass $displayField nicht funktioniert. Die leere Objekt zeigt ja schließlich den Wert der Variable displayField an.
    Aber hier auch der dump von $this->NeuesVorwort->NeuesBuch->find(‘list’):

    Array
    (
    [14] => CakePHP ist toll
    [13] => Was kann man mit CakePHP alles machen?
    [29] =>
    [18] => Titelname
    [28] =>
    )

    Es wird also der “name” des Buches als Wert genommen und nicht wie gewünscht und mit $displayField eigentlich auch beschrieben die “isbn”-Nummer.

  3. Pingback: CakePHP 2.x – Virtual Field oder auch: Mehr als nur ein DisplayField » sl leinhos – CakePHP Dokus

Die Kommentarfunktion ist geschlossen.