Typo3 6.0.0 Extension Builder erweitern von extbase Klassen

  • karf karf
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    12. 12. 2012, 14:36

    Hi,

    ich habe gerade angefangen meine erste Extension mit der neusten Typo3 Version zu bauen.
    Und stoße schon direkt am Anfang auf ein Problem zu dem ich absolut keine Lösung finde.

    Und zwar will ich ein Model anlegen, das die Frontend User erweitert. Normalerweise kein Problem, einfach die "Tx_Extbase_Domain_Model_FrontendUser" Klasse unter "Extend existing model class" angeben.

    Nun wurde die ja bei 6.0.0 umgenannt, wenn ich jetzt aber "TYPO3\CMS\Extbase\Domain\Model\FrontendUser" im Extension Builder eintrage bekomme ich als Fehlermeldung "Extension could not be saved: Table definitions for table typo3\cms\extbase\domain\model\frontenduser could not be loaded". (Klar so eine Tabelle kann es ja auch nicht geben ...)

    Habe ich irgendwas übersehen, oder kann das der aktuelle Extension Builder das (noch) nicht?

    EDIT: Ich habe es jetzt per Hand gemacht. Falls jemand vor dem selben Problem steht, hier die Schritte die ich gegangen bin: (Bisher scheint es so zu funktionieren, allerdings mehr wie einen kleinen Test habe ich noch nicht gemacht)

    Im Extension Builder habe ich das Model ganz normal angelegt und ihm gesagt er solle die Tabelle [i]fe_users[/i] erweitern, damit er mir das SQL schreibt (und keine eigene Tabelle dafür anlegt)

    Gleichzeitig habe ich ihm noch verboten in die [i]ext_typoscript_setup.txt[/i] zu schreiben. (Der Extension Builder denkt ja wir würden die fe_users direkt erweitern)
    Dazu in der settings.yaml " ext_typoscript_setup.txt: keep" eintragen.

    in die "ext_typoscript_setup.txt" kommt jetzt mein eigener typoscript code

    1. config.tx_extbase{
    2. persistence{
    3. classes{
    4.  
    5. TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
    6. subclasses {
    7. Tx_MyExtension_Member = TYPO3\MyExtension\Domain\Model\Member
    8.  
    9. }
    10. }
    11.  
    12. TYPO3\MyExtension\Domain\Model\Member {
    13. mapping {
    14. tableName = fe_users
    15. }
    16. }
    17. }
    18. }
    19. }

    Jetzt nur noch in der Model Klasse die Elternklasse von "\TYPO3\CMS\Extbase\DomainObject\AbstractEntity" auf "\TYPO3\CMS\Extbase\Domain\Model\FrontendUser" ändern.

    Das selbe noch beim Repository, und alles sollte funktionieren.


  • beo6 beo6
    Padawan
    0 x
    45 Beiträge
    1 Hilfreiche Beiträge
    12. 01. 2013, 21:10

    Hallo und danke für den Tipp.

    Leider bringt mich das ganze noch immer durcheinander.

    Ich bekomme leider kein user-Objekt.

    Ich bin dem folgenden Tutorial gefolgt und habe es an die gegebenheiten von Extbase 6.0 angepasst.
    [url=]http://tobias-seckinger.de/2012/09/frontend-benutzer-in-extbase-abfragen/[/url]

    Entsprechend habe ich meinen Controller mit folgendem erweitert:

    1. /**
    2. * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
    3. * @inject
    4. */
    5. protected $frontendUserRepository;

    Ich bekomme zwar mit

    1. $user=$GLOBALS['TSFE']->fe_user->user;

    Ein Array mit dem aktuellen User, aber das frontendUser Repository scheint leer zu sein.

    1. $currentuser=$this->frontendUserRepository->findAll();
    2. $this->view->assign('user', $currentuser);

    gibt zumindest

    1. TYPO3\CMS\Extbase\Persistence\Generic\QueryResultprototypeobject (empty)

    bei <f:debug> zurück.

    selbst wenn ich dem user verschiedenste Datensatztypen zuweise.

    kann mir hier jemand helfen?

    Schon einmal vielen Dank im vorraus.

  • beo6 beo6
    Padawan
    0 x
    45 Beiträge
    1 Hilfreiche Beiträge
    12. 01. 2013, 21:56

    ok es funktioniert. :)

    ich war natürlich so schlau und hatte beim testen findAll() verwendet.

    aber anscheinend funktioniert das beim UserRepository nicht.

    findByUid() funktioniert jedoch. Und das ist alles was ich brauche.

    Trozdem danke.

  • karf karf
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    14. 01. 2013, 15:18

    Die findAll() sollte ansich schon funktionieren.

    Aber eventuell steht in dem Feld "tx_extbase_type" nicht der richtige Wert drin?

  • NJoyLife NJoyLife
    R2-D2
    0 x
    83 Beiträge
    1 Hilfreiche Beiträge
    17. 01. 2013, 14:43

    >>Aber eventuell steht in dem Feld "tx_extbase_type" nicht der richtige Wert drin?
    Wie lautet denn der richtige Wert?

    Ich stehe vor dem gleichen Problem. Nur möchte ich tatsächlich eine Liste aller Fe_Users anzeigen.
    Aber weder das funktioniert, noch die Anzeige eines einzelnen Datensatzes. Meine Vorgehensweise ist die gleiche wie bei beo6.

    1. /**
    2. * feUserRepository
    3. *
    4. * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
    5. * @inject
    6. */
    7. protected $feUserRepository;
    8.  
    9. (...)
    10.  
    11. $allFeUsers = $this->feUserRepository->findAll();
    12. $this->view->assign('allFeUsers', $allFeUsers);

    Habe im TypoScript noch folgenden Eintrag hinzugefügt:

    1. config.tx_extbase.persistence.classes {
    2. Tx_Extbase_Domain_Model_FrontendUser {
    3. mapping.recordType >
    4. }
    5. }

    Debug gibt ein leeres Array aus - keine Fehlermeldung...

    Viele Grüße
    NJoyLife

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    17. 01. 2013, 15:52

    Hallo zusammen,

    hänge glaube ich am selben Problem. Habe eine Extension die unter 4.7 funktioniert und jetzt auf 6.0 nicht mehr. Folgender Fehler

    [b]Table 'myfolder.tx_extbase_domain_model_frontenduser' doesn't exist[/b]

    Alter Stand bei 4.7
    ---------------------
    - Im Extension Builder hatte ich eine Relation zur Class "Tx_Extbase_Domain_Model_FrontendUser" gesetzt

    - im Domain Model und Repository die FrontendUser.php und FrontendUserRepository.php angelegt

    mit
    class Tx_MyExt_Domain_Model_FrontendUser extends Tx_Extbase_DomainObject_AbstractEntity { ...
    bzw
    class Tx_MyExt_Domain_Repository_FrontendUserRepository extends Tx_Extbase_Persistence_Repository { ...

    - im Controller

    1. /**
    2. * userRepository
    3. *
    4. * @var Tx_Extbase_Domain_Repository_FrontendUserRepository
    5. */
    6. protected $userRepository;
    7.  
    8. ...
    9.  
    10. protected function initializeAction() {
    11. $this->userRepository =& t3lib_div::makeInstance('Tx_Extbase_Domain_Repository_FrontendUserRepository');
    12. }

    - in der Configuration/TypoScript/setup.txt

    1. plugin.tx_myext.persistence.classes {
    2. Tx_MyExt_Domain_Model_FrontendUser {
    3. mapping {
    4. tableName = fe_users
    5. recordType = Tx_Extbase_Domain_Model_FrontendUser
    6. }
    7. }
    8. }

    Habe schon etwas rumprobiert mit dem neuen Namespace auch mal die original FrontendUser.php und FrontendUserRepository.php mit entsprechenden Änderung genommen aber nichts funktioniert was genau müsste ich ändern steige da noch nicht ganz durch ...

    Gruß
    mimaxx

  • beo6 beo6
    Padawan
    0 x
    45 Beiträge
    1 Hilfreiche Beiträge
    17. 01. 2013, 18:34

    Hallo mimaxx,

    soweit ich weiß ist t3lib_div::makeInstance()

    in 6.0 nicht mehr erlaubt bzw. wurde sogar schon entfernt.

    Falls du es noch drin hast nehme es raus.

    ein

    /**
    * userRepository
    *
    * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
    * @inject
    */
    protected $userRepository;

    müsste reichen um es im ganzen Controller zu erreichen.

    @NJoyLife

    werde zuhause noch einmal durchschauen wo ich alles etwas geändert habe.
    Wenn es immer leer ist kann es zumindest am nicht oder falsch gesetzten recordType liegen.

  • NJoyLife NJoyLife
    R2-D2
    0 x
    83 Beiträge
    1 Hilfreiche Beiträge
    19. 01. 2013, 09:43

    Hi beo6

    Danke für deine Rückmeldung. Konntest du schon nachschauen, auf was der Wert deines recordTypes gesetzt ist?

    Danke für ein kurzes Update und viele Grüße
    NJoyLife

  • NJoyLife NJoyLife
    R2-D2
    0 x
    83 Beiträge
    1 Hilfreiche Beiträge
    19. 01. 2013, 14:23

    Ich möchte die FeUsers nicht erweitern, sondern nur darauf zugreifen. Dachte eigentlich, am logischsten wäre folgendes:

    1. config.tx_extbase{
    2. persistence{
    3. classes{
    4. {
    5. mapping {
    6. tableName = fe_users
    7. recordType = Tx_Extbase_Domain_Model_FrontendUser
    8. }
    9. }
    10.  
    11. }
    12. }

    In der ext_typoscript_setup.txt

    Aber das greift nicht. Nach wie vor: keine Fehlermeldung, einfach eine leere Ausgabe :-/

    Die Frontend-User sind alle auf RecordType "Tx_Extbase_Domain_Model_FrontendUser" gesetzt...

    Hat keiner ne Idee?

    Gruß
    NJoyLife

  • Sentor77 Sentor77
    Typ im Roten Hemd
    0 x
    3 Beiträge
    0 Hilfreiche Beiträge
    14. 03. 2013, 09:06

    Moin,
    ich stand vor dem gleichen Problem.
    In TYPO3 6 hat sich der Recorod Type geändert.
    Folgenden Wert muss er jetzt haben:

    1. TYPO3\CMS\Extbase\Domain\Model\FrontendUser

    Im Seiten TS der Rootseite habe ich folgenden Eintrag:
    1. TCAdefaults.fe_users.tx_extbase_type = TYPO3\CMS\Extbase\Domain\Model\FrontendUser
    2. TCAdefaults.fe_groups.tx_extbase_type = TYPO3\CMS\Extbase\Domain\Model\FrontendUserGroup

    Damit wir jeder neue Eintrag in die fe_users automatisch mit dme Record Type belegt.

    Hoffe konnte helfen.

    LG