Zum Inhalt springen

Anfänger Verständisfrage: Repository-Record liefert nur uid

Erstellt am 7. August 2012 · 4 Antworten · letzte Antwort am 14. August 2012

Tags: Frage

frame ·

Hallo!

Ich möchte eine Extension entwickeln. Finde nur leider immer Manuals mit Tools wie Kickstarter, die aber leider nicht meine Frage beantworten wie das Zusammenspiel in Extbase funktioniert.

Habe ein Model und zugehöriges Repository erstellt. So wie ich das verstanden habe sollte die Repository selbständig mit der Datenbank kommunizieren, wenn der Namensguide eingehalten wird. Also habe ich testweise einen Record (uid=56) angelegt und die findAll()-Methode aufgerufen. Bekomme aber nur uid und sonst kein definiertes Feld der Datenbank zurückgeliefert.

Im Model hab ich eine Property angelegt, mit Getter -und Setter. Diese bleibt aber uninitialisiert.
Ich habe zusätzlich im TCA in colums das Test-Feld definiert, hat aber nichts geholfen.

Wovon ist abhängig, dass die Repository ein Feld anzeigt? Was ist Default?
Vielen Dank im Voraus.

Unbekannter Benutzer ·

So ganz vestehe ich das Problem noch nicht. Ist für deine Property in der Datenbank ein Feld angelegt? Du musst bei Extbase die ext_tables.sql händisch füllen wenn du nicht gerade den Extension Builder benutzt. Wenn also die Property existiert hast du die denn auch gefüllt?

Eigentlich sollte sowas hier ganz normal funktionieren:

$allObjects = $repository->findAll();
foreach ($allObjects as $object) {
  echo $object->getFoo();
}

getFoo() natürlich durch den Getter zu ersetzen...

Mehr kann man jetzt dazu nicht sagen ohne den tatsächlichen Code zu sehen.

frame ·

Ja, es befindet sich exakt 1 Record in der Tabelle. Die Standardfelder uid, pid werden gelesen und angezeigt (uid = 56) - alle anderen Felder nicht.

zB habe ich das Feld objektart = "ZIMMER" in der Tabelle und auch die property $objektart im Model.
Dump:

object(Tx_GlobeImmo_Domain_Model_Reality)[196]
  protected 'objektart' => null
  protected 'etf' => null
  protected 'uid' => int 56
  protected '_localizedUid' => int 56
  protected '_languageUid' => null
  protected 'pid' => int 0
  private '_isClone' (Tx_Extbase_DomainObject_AbstractDomainObject) => boolean false
  private '_cleanProperties' (Tx_Extbase_DomainObject_AbstractDomainObject) => 
    array
      'objektart' => null
      'etf' => null
      'uid' => int 56
      'pid' => int 0
einpraegsam.​net ·

Wenn Standardfelder (uid, pid) angezeigt werden, deine Felder jedoch nicht, dann liegt der Fehler vermutlich im Model oder im TCA (TCA ist nach wie vor nötig).

Meine Vorgehensweise in deinem Fall wäre:
1. Zuerst Backendfunktionalitäten checken (kann ich im Backend einen Datensatz anlegen mit den benötigten Feldern)
2. Wenn das BE passt, würde ich mich auf das Modell stürzen - eventuell liegt hier der Fehler

frame ·

Ok. Das beantwortet meine Frage. TCA ist nötig.
Ich wollte mir ein Beispiel mit dem Kickstarter genauer ansehen - um zu verstehen, wies genau mit TCA funktioniert. Ich habe nämlich sehr viele Felder und mehrere Tabellen und die möchte ich nicht im Kickstarter anlegen müssen.

Der erstellte Plugin wird übrigens ohne Namen angezeigt. Also die Auswahlliste zeigt ein Icon aber keinen Text dazu - wieso?
Korrektur: Das ganze Plugin wird nicht angezeigt.

Aso: Der neue Extension Builder legt nicht automatisch eine registerPlugin()-Routine an. #paralyzed#

Hmm.. also ich habe keine Ahnung, weshalb meine vorige Tabelle nicht wollte aber die jetztige mit dem Kickstarter angelegte, frisst es. Nur die Property anlegen und im TCA.columns das neue Feld eintragen, mehr braucht es nicht.

Edit: Ist hidden null also nicht gesetzt, dann wird der Datensatz ignoriert. Er muss explizit 0 sein, sonst wird nichts angezeigt.