扩展TYPO3 femanager遇属性映射异常,求解决方案
解决femanager扩展属性映射异常问题
错误信息
属性路径处属性映射异常:在类型为In2code\Femanager\Domain\Model\User的目标对象中未找到属性propertyname
问题分析
出现该错误的核心原因是Extbase仍在使用femanager原生的User模型类,而非自定义的FrontendUser类,导致无法识别新增的propertyname属性。以下是针对性解决步骤:
1. 修正类映射配置(classes.php)
原配置的subclasses格式错误,需为原生User类明确指定记录类型与自定义子类的关联:
return [ \In2code\Femanager\Domain\Model\User::class => [ 'subclasses' => [ // 将默认记录类型0绑定到自定义子类 '0' => \TYP\TypCfg\Domain\Model\FrontendUser::class ] ], \TYP\TypCfg\Domain\Model\FrontendUser::class => [ 'tableName' => 'fe_users', 'recordType' => 0, ] ];
2. 指定femanager使用自定义模型
在扩展的ext_typoscript_setup.txt中添加配置,强制新建用户功能使用自定义模型:
plugin.tx_femanager { settings { new { model = \TYP\TypCfg\Domain\Model\FrontendUser } } }
3. 完善自定义控制器实现
确保NewController正确继承femanager控制器,并明确绑定自定义模型:
<?php namespace TYP\TypCfg\Controller; use TYP\TypCfg\Domain\Model\FrontendUser; use In2code\Femanager\Controller\NewController as FemanagerNewController; class NewController extends FemanagerNewController { protected function initializeCreateAction() { parent::initializeCreateAction(); $this->arguments['user']->setDataType(FrontendUser::class); } public function createAction(FrontendUser $user) { parent::createAction($user); } }
4. 配置表单字段与TCA
- 在
Configuration/TCA/Overrides/fe_users.php中添加字段配置:
<?php defined('TYPO3') or die(); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( 'fe_users', [ 'propertyname' => [ 'label' => 'LLL:EXT:typcfg/Resources/Private/Language/locallang_db.xlf:fe_users.propertyname', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim' ] ] ] ); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( 'fe_users', 'propertyname', '', 'after:email' );
- 在TypoScript中启用表单字段:
plugin.tx_femanager.settings.new.fields.propertyname { enabled = 1 label = LLL:EXT:typcfg/Resources/Private/Language/locallang.xlf:propertyname }
5. 清空TYPO3全部缓存
务必清空所有缓存(类缓存、配置缓存、页面缓存等),确保新配置和类映射生效。
内容的提问来源于stack exchange,提问作者Himanshu Gidhvani
相关产品推荐
相关产品推荐

