[TYPO3-german] Repository gibt NULL zurück bei mehrfacher Einbindung

Moritz Mädler mail at moritz-maedler.de
Mon Jul 16 10:28:03 CEST 2012


Hallo zusammen!

Ich bastele gerade an meiner ersten extbase-Extension die einen
Produktkatalog abbildet.
Zur Funktionsweise:
Die Extension ist als FE-Plugin über das Backend einzubinden - dabei
können die Haupt- und die Subkategorie gesetzt werden, auf deren Basis
dann die Produkte mit ebendieser Haupt/Sub-Kategorie im FE angezeigt
werden. Der Controller bekommt also aus dem Backend zwei DB-Ids übergeben,
die ich dann an das TypeRepository weitergebe, um mir die dazugehörigen
Kategoriedatensätze zurückgeben zu lassen. Diese übergebe ich dann an das
OfferRepository, dass mir die passenden Produkte zu diesen Datensätzen
zurückgibt.
Das Ganze funktioniert auch soweit prima, allerdings verlangt das Design,
dass ich das FE-Plugin [b]mehrfach pro Seite[/b] einbinde. Sobald ein
zweites FE-Plugin auf der Seite eingebunden ist, erhalte ich (trotz im
Backend korrekt gesetzter Haupt-/Subkategorie) folgende Exception:

----------------
PHP Catchable Fatal Error: Argument 1 passed to
Tx_MmdevFos_Domain_Repository_OfferRepository::findFiltered() must be an
instance of Tx_MmdevFos_Domain_Model_Type, null given,
----------------


Ich konnte das nun soweit nachvollziehen, dass beim zweiten Abfragen des
TypeRepositorys NULL zurückkommt - was mir ein Rätsel ist.

Ist es möglich, dass bei der ersten Abfrage das Ergebnis gecached wird und
es somit bei der zweiten Abfrage kein Ergebnis mehr liefert?
Gibt es eine Möglichkeit sich die im Repository ausgeführten Queries
anzeigen zu lassen, so dass ich einmal schauen kann, was da wirklich an
die DB geschickt wird?

Vielen Dank!


PS: Hier noch der Code des Controllers:
-----------------
/**
     * action to show a filtered list
     *
     * @param Tx_MmdevFos_Domain_Model_Type $maintype
     * @param Tx_MmdevFos_Domain_Model_Type $subtype
     * @param Tx_MmdevFos_Domain_Model_Type $category
     * @return void
    */
    public function filteredListAction( Tx_MmdevFos_Domain_Model_Type
$maintype = NULL,
                                        Tx_MmdevFos_Domain_Model_Type
$subtype = NULL) {

       // instantiate typeRepository
       $typeRepository =
t3lib_div::makeInstance('Tx_MmdevFos_Domain_Repository_TypeRepository');

       // check if args where null - if yes try to fetch from backendconf
       if ($maintype == NULL && $subtype == NULL) {
//           $maintype =
$this->typeRepository->findOneByUid((int)$this->settings['maintype']);
//           $subtype =
$this->typeRepository->findOneByUid((int)$this->settings['subtype']);
           $maintype =
$typeRepository->findOneByUid((int)$this->settings['maintype']);
           $subtype =
$typeRepository->findOneByUid((int)$this->settings['subtype']);
       }
        
       $filteredOffers = $this->offerRepository->findFiltered($maintype,
$subtype);

       $categories = array();
       foreach($filteredOffers as $offer) {
           if( !in_array(array_keys($categories),
$offer->getCategory()->getUid())){
               $categories[$offer->getCategory()->getUid()] =
$offer->getCategory();
           }
       }

       $this->view->assign('categories', array_values($categories));
       $this->view->assign('offer_count', count($filteredOffers));
       $this->view->assign('offers', $filteredOffers);
    }

 




More information about the TYPO3-german mailing list