[Frage] Repository in User Function benützen TYPO3-Version: 6.1.7

  • MichaelF MichaelF
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    24. 10. 2014, 21:35

    Hallo Freunde

    Folgendes möchte ich machen: Wenn jemand sich über direct_mail_subscription anmeldet, möchte ich in seinem tt_address-Record einige Felder ändern (z.B. ein Datum setzen, override genügt nicht).

    Folgendes habe ich probiert: ich setze meine eigene User Function bei plugin.feadmin.dmailsubscription.create.userFunc_afterSave.

    Das klappt ganz gut so:

    1. class AfterSaveUserFunction {
    2. public function main($config, $ref) {
    3. $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_address','uid='.intval($config['rec']['uid']), array('city' => 'Rome'));
    4. }
    5. }

    Wenn ich das allerdings über ein Repository zu bewerkstelligen versuche, [b]werden die Änderungen nicht gespeichert[/b].

    1. class AfterSaveUserFunction {
    2. public function main($config, $ref) {
    3.  
    4. // get the recipient repository (injecting does not seem to work)
    5. $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager');
    6. $repository = $objectManager->get('\XYZ\MeineExtension\Domain\Repository\RecipientRepository');
    7.  
    8. // update recipient
    9. $recipient = $repository->findByUidOnAllPages($config['rec']['uid'], true)->getFirst();
    10. $recipient->setCity('Rome');
    11. $repository->update($recipient);
    12.  
    13. // persist (does not work)
    14. $persistenceManager = $objectManager->get('\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager');
    15. $persistenceManager->persistAll();
    16. }
    17. }

    Ich wäre Euch sehr dankbar, wenn Ihr mir sagen könntet, warum das nicht geht. Oder wie das mit Extbase zu machen ist.


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    25. 10. 2014, 08:49

    Offtopic: Man kann an deinen beiden Beispielen sehr schön die "Vorteile" von dem so hochgelobten extbase sehen, daß ja angeblich alles so viel einfacher macht ( 7 Anweisungen vs. 1 ) 8-)

  • MichaelF MichaelF
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    25. 10. 2014, 11:08

    @jenses Sowas Ähnliches ging mir auch durch den Kopf. Es kann gut auch daran liegen, dass ich es einfach falsch gemacht habe.

    Ich habe nun eine Variante gefunden, die funktioniert: Ich habe im Repository diese Methode hinzugefügt:

    1. public function manuallyPersistAll() {
    2. $this->persistenceManager->persistAll();
    3. }

    Diese rufe ich dann auf in AfterSaveUserFunction::main:

    1. $repository->manuallyPersistAll();

    Dies ist eine Trial-and-Error-Lösung für ein Problem, das ich nicht verstanden habe. Ist das richtig so?

  • 1