首页 文章

TYPO3 /如何从现有的表fe_users创建存储库?

提问于
浏览
5

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

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

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

一般来说,如果可能的话,我需要为两个地方的新FE用户提供相同的插入对话框 . 如果没有,我可以创建自己的New / Edit / Show动作,但是我需要告诉TYPO3它应该使用FE用户的现有存储库 .

我正在使用拼写错误4.7.3 .

2 回答

  • 6

    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附带的相同对话框用于您自己的扩展,因此您必须在后端模块中创建自己的操作(new / edit / show)和表单 .

    [Edit]

    默认情况下,ExtBase假定所有fe_users都分配了记录类型 . 当您打开其中一个前端用户时,您将看到“扩展”选项卡包含一个下拉字段,该字段标记为“记录类型” . 如果未设置此字段,则ExtBase将无法使用存储库中的某个find-methods找到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
    
  • 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
    
                    }
                }
                SkiBoutique\SbChalets\Domain\Model\Extended {
                    mapping {
                        tableName = fe_users
                        recordType = Tx_Extendfeuser_Extended
                    }
                }
    
            }
        }
    }
    

    谢谢!!!

    也适用于TYPO3 7.6.X

相关问题