Dienstag, 12. August 2014

TYPO3 6.2 Form-Extension: PostProcessor in eigener Extension

Seit TYPO3 6.2 muss man die eigenen Postprocessors nicht mehr im sysext/form-Verzeichnis speichern, sondern kann die Postprozessoren in einer eigenen Extension auslagern. Dazu gibt es in sysext/form/Classes/PostProcessor/PostProcessor.php nun den Aufruf:
 if (class_exists($processorName, TRUE)) {
      $className = $processorName;
} else {
…
Alles was man tun muss, ist also einen PostProcessor erzeugen und dem Autoloading zur Verfügung stellen. Das Autoloading ist hier inder TYPO3 Anleitung beschrieben. Ich hab das ganze mit Hilfe eines Eintrages in ext_autoload.php umgesetzt.
Mein eigener Postprocessor heißt „tx_user_system_PostProcessors_MemberMail“ und wird auch genauso in der Form-Extension im Typoscropt angesprochen. Bei mir sieht das so aus:
prefix = tx_form
confirmation = 0
postProcessor {
        2 = tx_user_system_PostProcessors_MemberMail
                2 {
                               senderEmail = me@tld.com
…
In der ext_autoload.php habe ich dazu folgenden Eintrag in dem Return Array eingetragen:
 return array (…
"tx_user_system_PostProcessors_MemberMail" => t3lib_extMgm::extPath('user_system'). "Classes/PostProcessors/MemberMail.php",
…
)
In meinem Fall heißt die Extension in der ich die Datei abgelegt habe user_system.  Die Datei heißt MemberMail.php und liegt im Ordner typo3conf/ext/user_system/ Classes/PostProcessors/
In MemberMail.php heißt die Klasse „tx_user_system_PostProcessors_MemberMail“
Wichtig ist, dass diese Klasse das PostProcessorInterface implementiert. Konkret sieht das Klassenaufruf also so aus:
 
class tx_user_system_PostProcessors_MemberMail implements \TYPO3\CMS\Form\PostProcess\PostProcessorInterface
Nach den Anpassungen den Cache leeren und ab jetzt kann man den Core wieder gedankenlos updaten :)
Was ich leider nicht hinbekommen habe ist das Autoloading mit Namespaces statt ext_autoload.php hinzubekommen. Wenn jemand dazu eine Tipp hat, bin ich dankbar.
Im Forge ist die Änderung in PostPorcess.php  hier beschrieben.