5

我正在使用 Extbase 和 Fluid 创建一个特殊的 BE 模块,我需要一个代表标准 FE 用户的域对象。当我创建名为Feuser的新域对象并保存它时,扩展构建器会创建特殊的存储库,并且还想在数据库中创建特殊的表tx_myextkey_feuser。但是这个表已经作为fe_users存在。

是否可以告诉typo3 Feuser对象的存储库已经存在(作为fe_users表)并且typo3 应该使用现有的存储库?我怎样才能做到这一点?

我需要它,因为扩展(包括这个 BE 模块)需要在同一个地方(这个 BE 模块)有每个逻辑和控件。

一般来说,如果可能的话,我需要在两个地方为新的 FE 用户使用相同的插入对话框。如果没有,我可以创建自己的新建/编辑/显示操作,但我需要告诉 TYPO3 它应该将现有存储库与 FE 用户一起使用。

我正在使用错字 4.7.3。

4

2 回答 2

7

ExtBase 已经为现有的表 fe_user 提供了一个域模型。这个领域模型是:

Tx_Extbase_Domain_Model_FrontendUser

它包含 TYPO3 附带的所有默认 fe_users 字段。

如果您使用自己的字段扩展了 fe_users,则还必须扩展 Tx_Extbase_Domain_Model_FrontendUser 域模型和关联的存储库,以便它知道您添加到 fe_users 的新字段。

关联的存储库是:

Tx_Extbase_Domain_Repository_FrontendUserRepository

您必须为存储库设置存储 PID,以便它可以找到您的 fe_users。

对于前端插件中使用的控制器操作,请使用:

plugin.your_plugin {
    persistence {
        storagePid = somePid, anotherPid
    }
}

如果后端模块中使用的控制器操作使用:

module.your_module {
    persistence {
        storagePid = somePid, anotherPid
    }
}

据我所知,无法将 TYPO3 附带的相同对话框用于您自己的扩展,因此您必须在后端模块中创建自己的操作(新建/编辑/显示)和表单。

[编辑]

默认情况下,ExtBase 假设所有 fe_users 都分配了一个记录类型。当您打开一个前端用户时,您将看到“扩展”选项卡包含一个下拉字段,该字段标记为“记录类型”。如果未设置此字段,ExtBase 将无法使用存储库中的一种查找方法找到 fe_user。

您应该为所有 fe_users 设置记录类型(推荐方式),或者您可以通过在设置中使用以下 TS 来禁用到字段的映射

config.tx_extbase.persistence.classes {
    Tx_Extbase_Domain_Model_FrontendUser {
        mapping.recordType >
    }
}

对于新创建的 fe_users 或 fe_groups,您可以通过将以下 TS 添加到您的根页面 TS 来设置“记录类型”字段的默认值

TCAdefaults.fe_users.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUser
TCAdefaults.fe_groups.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUserGroup
于 2013-08-16T06:36:23.143 回答
6

对于 Extbase 6.X

您需要在扩展生成器内扩展现有模型类字段中提供类\TYPO3\CMS\Extbase\Domain\Model\FrontendUser 而不是Tx_Extbase_Domain_Repository_FrontendUserRepository

之后,您可以控制模型中的 fe_users ....

还在扩展的根目录中添加文件ext_typoscript_setup.txt(如果通过 extension_builder 生成,则会自动添加)

config.tx_extbase{
    persistence{
        classes{

            TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
                subclasses {
                    Tx_Extendfeuser_Extended = Model_class_with_namespace
                    
                }
            }
            Vendor\EXt\Domain\Model\Extended {
                mapping {
                    tableName = fe_users
                    recordType = Tx_Extendfeuser_Extended
                }
            }
            
        }
    }
}

谢谢!!!

也适用于 TYPO3 7.6.X

于 2014-03-13T10:01:03.860 回答