The storeFormData hook is triggered before a submitted form is stored to the
database. It passes the result set and the form object and expects the result
set as return value.
Parameters
array$data
The result set that will be written to the database table.
\Contao\Form$form
The form instance.
Return Values
Return $data or an array of key => values that should be written to the
database.
Example
// src/EventListener/StoreFormDataListener.php
namespaceApp\EventListener;useContao\CoreBundle\DependencyInjection\Attribute\AsHook;useContao\Form;useContao\FrontendUser;useDoctrine\DBAL\Connection;useSymfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;#[AsHook('storeFormData')]
classStoreFormDataListener{publicfunction__construct(privatereadonlyConnection$connection,privatereadonlyTokenStorageInterface$tokenStorage,){}publicfunction__invoke(array$data,Form$form):array{$data['member']=0;$user=$this->tokenStorage->getToken()?->getUser();if(!$userinstanceofFrontendUser){return$data;}if(!$this->columnExistsInTable('member',$form->targetTable)){return$data;}// Also store the member ID who submitted the form
$data['member']=$user->id;return$data;}privatefunctioncolumnExistsInTable(string$columnName,string$tableName):bool{$columns=$this->connection->getSchemaManager()->listTableColumns($tableName);foreach($columnsas$column){if($column->getName()===$columnName){returntrue;}}returnfalse;}}