Дополнительное поле в FrontendUser не сохранено - PullRequest
0 голосов
/ 20 сентября 2019

Система, которую я использую, настроена следующим образом:

Typo3 8.7.27, MariaDB 10.3.16, PHP 7.0.33

Я расширил FrontendUser с помощьюдополнительные некоторые дополнительные поля.Однако, если я позвоню action create, пользователь будет создан / сохранен, но поля: confirmation_token & reg_source не будут сохранены.Дело в том, что если я очищаю кеш, он работает некоторое время, но через несколько минут / часов проблема снова появляется.

Действие 'create' выглядит следующим образом:

/**
* action create
*
* @param \CODEMASCHINE\CmCoursefinder\Domain\Model\FrontendUser $user
* @return void
*/

public function createAction(\CODEMASCHINE\CmCoursefinder\Domain\Model\FrontendUser $user) {
 $feGroup = $this->userGroupRepository->findByUid(1);
 $random_token = substr(md5(uniqid(rand(), true)),0,8); //the token is generated properly

 $user->setPid($this->settings['usersStoragePid']);
 $user->addUsergroup($feGroup);
 $user->setEmail($user->getUsername());

 if (TYPO3_MODE === 'BE'){
   $this->userRepository->add($user);
   $user->setRegSource(3);
   $this->redirect('list');
 } else {
   $user->setRegSource(2);
   $user->setDisable(1);
   $user->setTxCmcoursefinderConfirmationToken($random_token); //the token is there. it is not empty

   $this->userRepository->add($user);
   $this->persistenceManager->persistAll();

   $pageUid = 418;
   $uri = $this->uriBuilder->reset()
     ->setCreateAbsoluteUri(true)
     ->uriFor('confirm', array('user' => $user->getUid(), 'confirmationToken' => $user->getTxCmcoursefinderConfirmationToken()),'User');
   $mailSubject = "a Email-Subject";
   $mailBody = "To Confirm your account please go to $uri "
   $this->redirect('complete');
 }
}

Поля confirmation_token & reg_source в 'ext_tables.php':

$newColumns = Array (
    'tx_cmcoursefinder_confirmation_token'  => array(
        'exclude' => 0,
        'label' => 'LLL:EXT:cm_coursefinder/Resources/Private/Language/locallang_db.xlf:tx_cmcoursefinder_domain_model_frontenduser.confirmationToken',
        'config' => array(
            'type' => 'input',
            'size' => 30,
            'eval' => 'trim'

            ),
    ),

    'reg_source'  => array(
        'exclude' => 0,
        'label' => 'LLL:EXT:cm_coursefinder/Resources/Private/Language/locallang_db.xlf:tx_cmcoursefinder_domain_model_frontenduser.regSource',
        'config' => array(
            'type' => 'input',
            'size' => 1,
            'eval' => 'trim'

        ),
    )
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $newColumns, 1);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'tx_cmcoursefinder_confirmation_token', '', 'after:email');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'reg_source', '', 'after:email');

Конфигурация / Typoscript / setup.txt

config.tx_extbase{
  persistence{
    classes{
      CODEMASCHINE\CmCoursefinder\Domain\Model\FrontendUser {
        mapping {
          tableName = fe_users
          recordType = 0
        }
      }
    }
  }
}

Есть идеи?если вам нужна дополнительная информация, пожалуйста, не стесняйтесь комментировать.

1 Ответ

0 голосов
/ 23 сентября 2019

Я думаю, вы упустили возможность сделать свой класс глобальной заменой данного класса.

ссылка на опечатку предлагает что-то вроде:

config.tx_extbase.persistence.classes {
    CODEMASCHINE\CmCoursefinder\Domain\Model\FrontendUser {
        mapping {
            tableName = fe_users
        }
    }    
}
...