我使用
TYPO3 10.4
和 in2code/Femanager
扩展来允许前端用户注册,并希望向表单添加自定义字段。
我已遵循有关此问题的文档here,并将我的字段放在表单中,如果在后端输入,我可以保存字段值。
我的问题是在前端表单中输入时,该字段不保存值。我想我错过了什么?
这就是我所拥有的:
/MyExtension/Configuration/Extbase/Persistence/Classes.php:
<?php
return [
\myVendor\MyExtension\Domain\Model\User::class => [
'tableName' => 'fe_users',
'recordType' => 0,
],
];
/MyExtension/Configuration/PageTS/PageTSConfig.tsconfig:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\In2code\Femanager\Domain\Model\User::class] = [
'className' => \myVendor\MyExtension\Domain\Model\User::class,
];
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
->registerImplementation(
\In2code\Femanager\Domain\Model\User::class,
\myVendor\MyExtension\Domain\Model\User::class
);
/MyExtension/Classes/Domain/Model/User.php :
<?php
namespace myVendor\MyExtension\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\Category;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
class User extends \In2code\Femanager\Domain\Model\User
{
protected string $myNewField;
public function getMyNewField(): string
{
return $this->myNewField;
}
public function setMyNewField(string $myNewField): void
{
$this->myNewField = $myNewField;
}
}
myExtension/ext_tables.sql:
CREATE TABLE fe_users (
myExtension_myNewField varchar(255) DEFAULT '' NOT NULL,
);
myExtension/Configuration/TCA/Overrides/fe_users.php:
<?php
defined('TYPO3_MODE') || die();
$GLOBALS['TCA']['fe_users']['ctrl']['type'] = 'tx_extbase_type';
$tmpFeUsersColumns = [
'myExtension_myNewField' => [
'exclude' => 1,
'label' => 'My New Field',
'config' => [
'type' => 'text',
],
]
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $tmpFeUsersColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'myExtension_myNewField');
myExtension/Configuration/Extbase/Persistence/Classes.php:
<?php
declare(strict_types=1);
use myVendor\myExtension\Domain\Model\User;
return [
User::class => [
'tableName' => 'fe_users',
'recordType' => 0,
],
];
myExtension/ext_localconf.php:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\In2code\Femanager\Domain\Model\User::class] = [
'className' => \myVendor\myExtension\Domain\Model\User::class,
];
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
->registerImplementation(
\In2code\Femanager\Domain\Model\User::class,
\myVendor\myExtension\Domain\Model\User::class
);
我在 Github 上找到了用户 bh-teufels 的答案这里。
他们很有帮助地指出了保存字段所需的文档中的一些更改:
类.php
return [
\myVendor\myExtension\Domain\Model\User::class => [
'tableName' => 'fe_users',
'properties' => [
'myNewField' => [
'fieldName' => 'myExtension_myNewField'
]
],
],
];
ext_localconf.php
call_user_func(function () {
// Register extended domain class
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
->registerImplementation(
\In2code\Femanager\Domain\Model\User::class,
\myVendor\myExtension\Domain\Model\User::class
);
});