Zum Inhalt springen

Repository ist null

Erstellt am 24. Dezember 2016 · 2 Antworten · letzte Antwort am 27. Dezember 2016

Tags: Extbase, TYPO3 7, Frage

getit ·

Ich bekomme das Repository nicht.
Ich habe vor langer Zeit einen Artikel (Mapping von Tabellen - So klappts) geschrieben, und wollte das jetzt wieder ausprobieren.

Bekomme aber nur die Fehlermeldung:
Uncaught TYPO3 Exception
Argument 2 passed to Pluswerk\Simpleblog\Controller\BlogController::injectRepositories() must be an instance of Pluswerk\Simpleblog\Domain\Repository\PageRepository, none given, called in C:\xampp\htdocs\downloads\typo3_src-7.6.14\typo3\sysext\extbase\Classes\Object\Container\Container.php on line 234

TypeError thrown in file
C:\xampp\htdocs\typo3site\typo3conf\ext\simpleblog\Classes\Controller\BlogController.php in line 24.

Warum??

Meine setup.txt (nur der Teil fürs mapping):

plugin.tx_simpleblog {
  persistence {
    storagePid = 1
    classes {
      Pluswerk\Simpleblog\Domain\Model\Page {
        mapping {
          tableName = pages
        }
      }
    }
  }
}

Das Respository:
<?php
namespace Pluswerk\Simpleblog\Domain\Repository;

/**
* The repository for Pages *
* @package Pluwerk\Simpleblog\Domain\Repository
*/
class PageRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {

}

und das Model:
<?php
namespace Pluswerk\Simpleblog\Domain\Model;

/**
* Class Page
* @package Pluswerk\Simpleblog\Domain\Model
*/
class Page extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

/**
* title
*
* @var string
*/
protected $title;

/**
* Returns the title
*
* @return string $title
*/
public function getTitle() {
return $this->title;
}
}

im Controller:
<?php
namespace Pluswerk\Simpleblog\Controller;

use Pluswerk\Simpleblog\Domain\Model\Blog;
use Pluswerk\Simpleblog\Domain\Repository\BlogRepository;
use Pluswerk\Simpleblog\Domain\Repository\PageRepository;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class BlogController extends ActionController {
/**
* @var BlogRepository
*/
protected $blogRepository;

/**
* @var PageRepository
*/
protected $pageRepository;

/**
* @param BlogRepository $blogRepository
* @param PageRepository $pageRepository
*/
public function injectRepositories(BlogRepository $blogRepository, PageRepository $pageRepository) { //<--Zeile 24
$this->blogRepository = $blogRepository;
$this->pageRepository = $pageRepository;
}

/**
* @param string $search
*/
public function listAction($search = '') {

$this->view->assign('blogs', $this->blogRepository->findSeachForm($search));
$this->view->assign('search', $search);
}
}

Ich habe alle Dateien mehrfach kontrolliert, alle Caches gelöscht, die Extension mal deinstalliert und neu installiert - nix hat geholfen.

Was mache ich falsch??

getit ·

🙂🙂 Konnte das jetzt durch viel Probieren selber lösen !!! 🙂🙂

Das Hauptproblem scheint die Methode

public function injectRepositories(...)

gewesen zu sein.

Scheinbar kann man pro inject-Methode nur eine Parameter übergeben.

Das funktioniert (im Controller):

  /**
   * @var BlogRepository
   */
  protected $blogRepository;

  /**
   * @var PageRepository
   */
  protected $pageRepository;

  /**
   * @param BlogRepository $blogRepository
   */
  public function injectBlogRepository(BlogRepository $blogRepository) {
    $this->blogRepository = $blogRepository;
  }

  /**
   * @param PageRepository $pageRepository
   */
  public function injectPageRepository(PageRepository $pageRepository) {
    $this->pageRepository = $pageRepository;
  }

und die setup.txt hab ich noch etwas erweitert:

plugin.tx_simpleblog {
  persistence {
    storagePid = 0
		storagePid.recursive = 99
    classes {
      Pluswerk\Simpleblog\Domain\Model\Page {
        mapping {
          tableName = pages
        }
      }
    }
  }
  persistence {
    storagePid = 0
    classes {
      Pluswerk\Simpleblog\Domain\Model\Blog {
        mapping {
          tableName = tx_simpleblog_domain_model_blog
        }
      }
    }
  }
}
pstranghoener ·

Vielen Dank dass du die Lösung gepostet hast! Ich markiere deine Frage mal als gelöst, damit alle anderen Mitglieder wissen, dass sie hier Antworten finden, ja? 🙂