Ich habe mit Metamodels 2.3 eine Tabelle mm_dz_mem_member angelegt.
Diese hat eine 1:1 Relation (Select) zur tl_member.
Ziel ist es in dieser Tabelle zusätzliche Informationen zu einem neuen User bei der Aktivierung zu speichern.
Dazu verwende ich den Hook activateAccount.
Einen neuen Datensatz bei der Aktivierung des Accounts anzulegen funktioniert.
Einträge in verschiedene Felder auch.
Was mir leider nicht gelingt ist die Relation in das Feld id_member zu speichern.
Ein Tipp wo der Fehler liegt wäre sehr hilfreich.
Code:
<?php
// src/EventListener/MMSchreiben.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\Module;
use Contao\MemberModel;
// notwwendig fürs logging
use Contao\CoreBundle\Monolog\ContaoContext;
use Contao\CoreBundle\Monolog\SystemLogger;
use Psr\Log\LogLevel;
use \Contao\System;
/**
* @Hook("activateAccount")
*/
class MMSchreiben
{
public function __invoke(MemberModel $member, Module $module): void
{
// Name der MetaModel
$modelName = 'mm_dz_mem_member';
$modelNewField = 'id_member';
// ID des aktivierten Useraccounts
$memberId = $member->id;
$factory = \Contao\System::getContainer()->get('metamodels.factory');
$model = $factory->getMetaModel($modelName);
$model2 = $factory->getMetaModel($modelName2);
$ObjItem = new \MetaModels\Item($model, array());
$ObjItem->set('pid', $memberId);
$ObjItem->set('alias', $memberId);
$ObjItem->set('published', '1');
$memberIdAttribute = $model->getAttribute('id_member');
$memberIdValue = $memberIdAttribute->widgetToValue($memberId, 'id_member');
$ObjItem->set('id_member', $memberIdValue);
$ObjItem->save();
\System::getContainer()
->get('monolog.logger.contao')
->log(LogLevel::INFO, 'ActivateAccount: modelName=' . $modelName . ' - memberId=' . $memberId, array(
'contao' => new ContaoContext(__CLASS__.'::'.__FUNCTION__, TL_GENERAL
)));
}
}
Lesezeichen