Tx_Extbase_Persistence_ObjectStorage Fehler [Gelöst]

  • Gloey Gloey
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    20. 06. 2011, 11:28

    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 Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    21. 06. 2011, 17:57

    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):

    1. <?php
    2.  
    3. /**
    4.  *
    5.  * @var Tx_Extbase_Persistence_ObjectStorage<Tx_MyExt_Domain_Model_Contact>
    6.  */
    7. protected $contacts;
    8.  
    9. /**
    10.  *
    11.  * Constructor
    12.  */
    13. public function __construct(){
    14. $this->contacts = new Tx_Extbase_Persistence_ObjectStorage;
    15. }
    16.  
    17. ?>

  • Gloey Gloey
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    22. 06. 2011, 09:07

    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).

    1. <?php
    2.  
    3. /**
    4.  * relationCompCont
    5.  *
    6.  * @var Tx_Extbase_Persistence_ObjectStorage<Tx_FhwTimetableWhb_Domain_Model_RelationCompCont>
    7.  */
    8. protected $relationCompCont;
    9.  
    10.  
    11. public function __construct() {
    12. //Do not remove the next line: It would break the functionality
    13. $this->initStorageObjects();
    14. }
    15.  
    16. /**
    17.  * Initializes all Tx_Extbase_Persistence_ObjectStorage instances.
    18.  *
    19.  * @return void
    20.  */
    21. protected function initStorageObjects() {
    22. /**
    23.   * Do not modify this method!
    24.   * It will be rewritten on each save in the extension builder
    25.   * You may modify the constructor of this class instead
    26.   */
    27. $this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage();
    28. }
    29.  
    30. ?>

    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 Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    22. 06. 2011, 10:46

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

    Also so:

    1. $this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage;

  • Gloey Gloey
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    23. 06. 2011, 11:21

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

    1. <?php
    2.  
    3. protected $relationCompCont;
    4.  
    5. public function __construct() {
    6. $this->relationCompCont = new Tx_Extbase_Persistence_ObjectStorage;
    7. }
    8.  
    9. ?>

  • Typo3Cuckoo Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    27. 06. 2011, 10:39

    Hi,

    die Annotations (Kommentare) sollten aber schon da bleiben ;)

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

  • Gloey Gloey
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    08. 07. 2011, 11:15

    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.

  • BlackPixel BlackPixe...
    Sternenflotten-Admiral
    0 x
    230 Beiträge
    3 Hilfreiche Beiträge
    08. 07. 2011, 13:41

    kann es sein das du versucht hast mittels var_dump oder print_r den Storage auszugeben? Denn genau da ist die Krux begraben.

    Dafür gibt es eine kleine ext mit der du Objekte debuggen kannst ohne diesen Fehler zu bekommen:
    http://www.t3node.com/blog/debug-helper-extension-for-extbase/

    Gruß Manfred

    TYPO3 Slider Revolution: https://www.rutschmann.biz/extensions/typo3-slider-revolution/
    TYPO3 Layerslider Extension: http://www.rutschmann.biz/extensions/typo3-layerslider/
    TYPO3 Responsive Flipbook Extension: http://www.rutschmann.biz/extensions/typo3-responsive-flipbook/
    TYPO3 PayPal Download Checkout: http://www.rutschmann.biz/extensions/typo3-paypal-download/

    http://www.rutschmann.biz/
    ----------------------------------------------------
    Extbase, Fluid, HTML & CSS Development

  • xandio xandio
    Padawan
    0 x
    40 Beiträge
    0 Hilfreiche Beiträge
    08. 07. 2011, 14:49

    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 Gloey
    T3PO
    0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    10. 07. 2011, 18:12

    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 ;-)