Zum Inhalt springen

Tx_Extbase_Persistence_ObjectStorage Fehler

Erstellt am 20. Juni 2011 · 11 Antworten · letzte Antwort am 20. Juli 2011

Tags: Frage

Gloey ·

Hallo allerseits!

Ich versuche mich gerade an einer Extension bei der ich die Klassen Company und Contact (= Kontaktperson, Mitarbeiter) habe. Eine Company kann mehrere Contacts haben, ein Contact kann aber auch für mehrere Companies arbeiten. Deshalb habe ich mir die Zwischentabelle RelationCompCont gebaut, die die UIDs von Company und Contact speichert.

Um von der Company aus auf RelationCompCont zugreifen zu können, habe ich ein Tx_Extbase_Persistence_ObjectStorage.
In der Klasse Company wird es initialisiert durch
$this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage();

Bei einer Debugausgabe bekomme ich aber immer nur den Fehler:
[warning:Tx_Extbase_Persistence_ObjectStorage:private] => You should never see this warning. If you do, you probably used PHP array functions like current() on the Tx_Extbase_Persistence_ObjectStorage. To retrieve the first result, you can use the getFirst() method.

Ich habe schon nach dem Fehler gesucht, aber nicht rausgefunden, was ich anders machen muss. Im Blogbeispiel wird auch mit dem ObjectStorage gearbeitet und dort scheint es ja wunderbar zu funktionieren. Was mache ich falsch?

Gruß, Birte

Typo3Cuckoo ·

Hallo Gloey,

zeig mal deinen Code, wie du das ObjectStorage in deinem Domain Model angelegt hast.

Es sollte in etwa so aussehen:

Company.php (Domain Model):

<?php

/**
 * 
 * @var Tx_Extbase_Persistence_ObjectStorage<Tx_MyExt_Domain_Model_Contact>
 */
protected $contacts;

/**
 *
 * Constructor
 */
public function __construct(){
  $this->contacts = new Tx_Extbase_Persistence_ObjectStorage;
}

?>
Gloey ·

Hallo Typo3Cuckoo,

der Code sieht ziemlich gleich aus, nur dass bei mir noch ein Umweg über initStorageObjects gemacht wird (Der Code wurde vom ExtensionBuilder erzeugt).

<?php

/**
 * relationCompCont
 *
 * @var Tx_Extbase_Persistence_ObjectStorage<Tx_FhwTimetableWhb_Domain_Model_RelationCompCont>
 */
protected $relationCompCont;


public function __construct() {
  //Do not remove the next line: It would break the functionality
  $this->initStorageObjects();
}

/**
 * Initializes all Tx_Extbase_Persistence_ObjectStorage instances.
 *
 * @return void
 */
protected function initStorageObjects() {
  /**
   * Do not modify this method!
   * It will be rewritten on each save in the extension builder
   * You may modify the constructor of this class instead
   */
  $this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage();
}

?>

Ich habe schon ausprobiert das new direkt im Construktor zu machen, aber das hat auch keine Änderung ergeben.

Außerdem habe ich noch probiert:

$this->setRelationCompCont(new Tx_Extbase_Persistence_ObjectStorage());

und

$this->relationCompCont = t3lib_div::makeInstance('Tx_Extbase_Persistence_ObjectStorage');

Typo3Cuckoo ·

Dann versuchs doch mal auf dem von mir vorgeschlagenen Weg und lass in der Zeile die zwei Klammern am Ende weg.

Also so:

$this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage;
Gloey ·

Ich habe das jetzt geändert, aber leider ist der Fehler immer noch da.
So sieht es jetzt aus:

<?php

protected $relationCompCont;

public function __construct() {
$this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage;
}

?>
Typo3Cuckoo ·

Hi,

die Annotations (Kommentare) sollten aber schon da bleiben 😉

Bekommst du immer noch die gleiche Fehlermeldung oder kommt jetzt was anderes?

Gloey ·

Die Kommentare sind auch noch im Code, die hatte ich nur hier rausgenommen ;-)

Die Fehlermeldung bekomme ich immernoch, ich kann aber trotzdem mit dem ObjectStorage arbeiten. Sobald ich einen Wert gespeichert habe, taucht die Meldung nicht mehr auf. Insofert ignoriere ich das jetzt einfach mal, inzwischen habe ich wieder ein neues Problem ;-)

Vielen Dank troztdem für die Hilfe.

xandio ·

Eigentlich handelt es sich nicht um eine Fehlermeldung, sondern um das Sichtbarmachen des privaten Feldes "warning" eines ObjectStorage-Objekts mittels debug.

Viele Grüße,
Xandi

Gloey ·

Stimmt, beim Debuggen bin ich darauf gestoßen und dachte, ich muss zuerst das "Problem" lösen, bevor ich damit arbeiten kann. Wieder was dazu gelernt ;-)

Gloey ·

Ja, klar, sorry, ich bin noch nicht so vertraut mit den gepflogenheiten dieses Forums.
(Ich weiß, es steht in den Regeln...)