如何向注册表(femanager)添加新字段?

问题描述 投票:0回答:1

我使用

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
    );
php typo3 typo3-extensions typo3-10.x
1个回答
0
投票

我在 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
        );
});
© www.soinside.com 2019 - 2024. All rights reserved.