Discussion:
[TYPO3-german] Eigene Extension mit Verwendung von fe_user
TYPO3 User
2015-12-28 13:12:57 UTC
Permalink
Hallo zusammen,

ich bin dabei mich in Extbase einzulesen und habe auch schon erste kleinere "erfolge" - Ich benötige jetzt jedoch leider Hilfe aus der Community.

Folgendes ist bisher geschehen:
- User angelegt und Tx_Extbase_Domain_Model_FrontendUser zugewiesen
- Eigene Extension via Extension Builder erstellt
- Den UserController.php wie folgt erweitert:

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

sowie

...
public function listAction()
{
$userObj = $this->userRepository->findAll();
$this->view->assign('users', $userObj);
}
...

Soweit funktioniert das auch, alle vorhandenen User werden angezeigt. Möchte ich jetzt jedoch einen vorhandenen Datensatz bearbeiten (Action edit) erhalte ich:

Object of type [VENDORNAME]\[EXTENSIONNAME]\Domain\Model\User with identity "1" not found. (More information)

Mein Model habe ich (eigentlich?) um das Model von FrontendUser erweitert:

/**
* User
*/
class User extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
}

Wo habe ich hier einen Fehler?
--
LG,
Mario
Stefan Padberg
2015-12-28 14:16:15 UTC
Permalink
Hallo Mario,

was heißt "UserController erweitert"?

Was soll deine eigene Extension denn machen? Und warum soll sie auf
FrontendUser zugreifen können?

Zwei Gedanken fallen mir noch ein:

Solange du keine neuen Methoden für FrontuserRepository benötigst, musst
du gar kein eigenes FrontendUserRepository in deiner Extension anlegen.
Du kannst in deinen Controllern direkt auf das TYPO3-Frontenduser
Repository zugreifen. Du musst es dort nur zusätzlich injecten.

Wenn du ein Edit-Formular im Fluid-Template erstellst, musst du es so
einstellen, dass es auf das richtige Objekt zeigt. Man kann das
gewünschte Objekt und die gewünschte Aktion dem Formular mitgeben.

Beste Grüße
Stefan
Post by TYPO3 User
Hallo zusammen,
ich bin dabei mich in Extbase einzulesen und habe auch schon erste
kleinere "erfolge" - Ich benötige jetzt jedoch leider Hilfe aus der
Community.
- User angelegt und Tx_Extbase_Domain_Model_FrontendUser zugewiesen
- Eigene Extension via Extension Builder erstellt
...
/**
*/
protected $userRepository;
...
sowie
...
public function listAction()
{
$userObj = $this->userRepository->findAll();
$this->view->assign('users', $userObj);
}
...
Soweit funktioniert das auch, alle vorhandenen User werden angezeigt.
Möchte ich jetzt jedoch einen vorhandenen Datensatz bearbeiten (Action
Object of type [VENDORNAME]\[EXTENSIONNAME]\Domain\Model\User with
identity "1" not found. (More information)
/**
* User
*/
class User extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
}
Wo habe ich hier einen Fehler?
--
Bergische Webschmiede
Dipl.-Ing. Stefan Padberg
TYPO3-Integrator und Webprogrammierer
:: Borner Str. 18 - 42349 Wuppertal
:: +49 202 97648355
:: +49 173 9219845
:: ***@bergische-webschmiede.de
:: http://www.bergische-webschmiede.de
Mario T
2015-12-28 14:24:28 UTC
Permalink
Hallo Stefan,

danke für deine schnelle Antwort.

Also mein Ziel war es, dass die Nutzer selbst ihre Daten über das Frontend bearbeiten können. Zudem sollen bestimmte User (geregelt über Gruppen/Zugriffsliste) eine vollständige Nutzerlsite erhalten und über eine Edit-Funktion einzelne Datensätze bearbeiten können ohne dass das Backend benötigt wird.

Folgendes wollte ich damit realisieren:
- Kennwort ändern
- Eigene Daten bearbeiten
- Userliste einsehen, einzelne User bearbeiten sowie de/aktivieren, anlegen und/oder löschen.
- Zudem müssten knapp 10 zusätzliche Felder implementiert werden

Aktuell greife ich auch über meinen eigenen Controller auf das Repository von FrondendUser zurück, die Listenansicht hierzu funktioniert auch, jedoch eben nicht die Aktion "edit".

Ich komme leider gar nicht zum Edit-Formular selbst. Es kommt bereits vorher die oben genannte Fehlermeldung.
--
LG,
Mario
Stefan Padberg
2015-12-30 09:40:26 UTC
Permalink
Hallo Mario,

damit das funktioniert, benötigst du in deinem UserController auch die
editAction und in deinem Template-Pfad eine Edit.html im User-Verzeichnis.

Hast du die?

Gruß
Stefan
Post by Mario T
Hallo Stefan,
danke für deine schnelle Antwort.
Also mein Ziel war es, dass die Nutzer selbst ihre Daten über das
Frontend bearbeiten können. Zudem sollen bestimmte User (geregelt über
Gruppen/Zugriffsliste) eine vollständige Nutzerlsite erhalten und über
eine Edit-Funktion einzelne Datensätze bearbeiten können ohne dass das
Backend benötigt wird.
- Kennwort ändern
- Eigene Daten bearbeiten
- Userliste einsehen, einzelne User bearbeiten sowie de/aktivieren,
anlegen und/oder löschen.
- Zudem müssten knapp 10 zusätzliche Felder implementiert werden
Aktuell greife ich auch über meinen eigenen Controller auf das
Repository von FrondendUser zurück, die Listenansicht hierzu
funktioniert auch, jedoch eben nicht die Aktion "edit".
Ich komme leider gar nicht zum Edit-Formular selbst. Es kommt bereits
vorher die oben genannte Fehlermeldung.
--
Bergische Webschmiede
Dipl.-Ing. Stefan Padberg
TYPO3-Integrator und Webprogrammierer
:: Borner Str. 18 - 42349 Wuppertal
:: +49 202 97648355
:: +49 173 9219845
:: ***@bergische-webschmiede.de
:: http://www.bergische-webschmiede.de
Mario T
2015-12-31 08:30:09 UTC
Permalink
Hallo Stefan,

soweit scheint es (s. letzter Post) zu funktionieren. Jedoch ist mir bisher schleierhaft warum das Mapping via TypoScript überhaupt nötig ist. Hier nochmal die Frage die sich mir gestellt hat:

"
Weshalb kann ich also über meinen eigenen Controller auf das "fremde" Repository FrontendUserRepository zugreifen, jedoch nicht einfach in meinem eigenen Model nur via extend \TYPO3\CMS\Extbase\Domain\Model\FrontendUser auf die einezlnen Felder zugreifen? Bzw. weshalb das zusätzliche Mapping wenn im User der Datensatztyp bereits auf Tx_Extbase_Domain_Model_FrontendUser gesetzt ist.
"

Zudem habe ich noch nicht ganz verstanden warum das:
public function showAction(\[VENDOR]\[EXTNAME]\Domain\Model\MyUser $myuser) {
var_dump('test');die;/*
}
funkitoniert, aber das hier
public function showAction() {
var_dump('test');die;/*
}
jedoch mit einem "OpsOops, an error occurred! Code XYZ" endet.

Vielen Dank nochmal & einen guten Rutsch ins Jahr 2016!
--
LG,
Mario
Philipp Gampe
2015-12-28 14:36:08 UTC
Permalink
Hi TYPO3 User,

Bitte mit richtigen Namen Posten. Das ist ein Gebot der Höflichkeit.
Ggf. ist noch das Mapping im TS einzutragen. Ansonsten weiß er ja nicht,
dass zu deinem Modell die Tabelle fe_users statt tx_extkey_domain_model_user
gehört.

Grüße
--
Philipp Gampe – PGP-Key 0AD96065 – TYPO3 UG Bonn/Köln
Certified Integrator – Active contributor TYPO3 CMS
TYPO3 .... inspiring people to share!
Mario T
2015-12-28 14:46:18 UTC
Permalink
Hallo Philipp,

danke für deine Antwort.

Ich habe dem Nutzer den Datensatztyp Tx_Extbase_Domain_Model_FrontendUser zugewiesen. Ansonsten habe ich bisher kein Typoscript verwendet.

P.S.: Den Namen hatte ich direkt nach der Anmeldung entsprechend geändert. Vielleicht dauert das einfach noch bis es übernommen wird?
--
LG,
Mario
Mario T
2015-12-28 16:11:45 UTC
Permalink
Hallo nochmal,

ich habe nun eine DAtei ext_typoscript_setup.txt im Root-Dir der Extension mit foglendem Inhalt angelegt:

config.tx_extbase{
persistence{
classes{
TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
subclasses {
Tx_[EXTNAME]_[MODELNAME] = [VENDOR]\[EXTNAME]\Domain\Model\[MODELNAME]
}
}
[VENDOR]\[EXTNAME]\Domain\Model\[MODELNAME] {
mapping {
tableName = fe_users
recordType = Tx_Extbase_Domain_Model_FrontendUser
}
}
}
}
}

Dies schein so nun zu funktionieren. Ich frage mich jetzt jedoch warum das überhaupt nötig ist.

Weshalb kann ich also über meinen eigenen Controller auf das "fremde" Repository FrontendUserRepository zugreifen, jedoch nicht einfach in meinem eigenen Model nur via extend \TYPO3\CMS\Extbase\Domain\Model\FrontendUser auf die einezlnen Felder zugreifen? Bzw. weshalb das zusätzliche Mapping wenn im User der Datensatztyp bereits auf Tx_Extbase_Domain_Model_FrontendUser gesetzt ist.
--
LG,
Mario
Loading...