[Frage] Repository ist null TYPO3-Version: 7.6.14

  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    24. 12. 2016, 14:01

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

    1. plugin.tx_simpleblog {
    2. persistence {
    3. storagePid = 1
    4. classes {
    5. Pluswerk\Simpleblog\Domain\Model\Page {
    6. mapping {
    7. tableName = pages
    8. }
    9. }
    10. }
    11. }
    12. }

    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??


  • 1
  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    24. 12. 2016, 16:48

    :):) Konnte das jetzt durch viel Probieren selber lösen !!! :):)

    Das Hauptproblem scheint die Methode

    1. public function injectRepositories(...)

    gewesen zu sein.

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

    Das funktioniert (im Controller):

    1. /**
    2.   * @var BlogRepository
    3.   */
    4. protected $blogRepository;
    5.  
    6. /**
    7.   * @var PageRepository
    8.   */
    9. protected $pageRepository;
    10.  
    11. /**
    12.   * @param BlogRepository $blogRepository
    13.   */
    14. public function injectBlogRepository(BlogRepository $blogRepository) {
    15. $this->blogRepository = $blogRepository;
    16. }
    17.  
    18. /**
    19.   * @param PageRepository $pageRepository
    20.   */
    21. public function injectPageRepository(PageRepository $pageRepository) {
    22. $this->pageRepository = $pageRepository;
    23. }

    und die setup.txt hab ich noch etwas erweitert:

    1. plugin.tx_simpleblog {
    2. persistence {
    3. storagePid = 0
    4. storagePid.recursive = 99
    5. classes {
    6. Pluswerk\Simpleblog\Domain\Model\Page {
    7. mapping {
    8. tableName = pages
    9. }
    10. }
    11. }
    12. }
    13. persistence {
    14. storagePid = 0
    15. classes {
    16. Pluswerk\Simpleblog\Domain\Model\Blog {
    17. mapping {
    18. tableName = tx_simpleblog_domain_model_blog
    19. }
    20. }
    21. }
    22. }
    23. }

  • pstranghoener pstrangho...
    Die Macht
    0 x
    531 Beiträge
    24 Hilfreiche Beiträge
    27. 12. 2016, 08:36

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

  • 1