TYPO3 8.7:扩展sys_category添加新字段后Fluid调试无此字段
嘿,我来帮你搞定这个问题!你已经完成了后台字段的添加和数据库存储,但Extbase要在Fluid的f:debug里显示自定义字段,还差几个关键配置步骤,我给你拆解清楚:
1. Model层的关键配置(最容易遗漏)
你应该已经创建了继承系统核心Category的自定义Model,但要确保做了这两点:
- 添加属性与ORM注解:明确把数据库字段映射到Model属性,比如:
namespace YourVendor\YourExtension\Domain\Model; use TYPO3\CMS\Extbase\Domain\Model\Category as CoreCategory; use Doctrine\ORM\Mapping as ORM; class Category extends CoreCategory { /** * 关联的页面ID * @var int|null * @ORM\Column(name="page", type="integer", nullable=true) */ protected ?int $page = null; /** * @return int|null */ public function getPage(): ?int { return $this->page; } /** * @param int|null $page */ public function setPage(?int $page): void { $this->page = $page; } }
- 注册自定义Model替换核心类:在
ext_localconf.php里告诉Extbase用你的Model替代系统默认的Category:
// 注册子类映射 $GLOBALS['TYPO3_CONF_VARS']['EXT']['extbase']['persistence']['classes'][ \TYPO3\CMS\Extbase\Domain\Model\Category::class ] = [ 'subclasses' => [ \YourVendor\YourExtension\Domain\Model\Category::class ] ]; // 注册实现类 \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class) ->registerImplementation( \TYPO3\CMS\Extbase\Domain\Model\Category::class, \YourVendor\YourExtension\Domain\Model\Category::class );
2. Typoscript的字段映射配置
这一步是很多人忽略的!你需要在扩展的setup.typoscript里配置Extbase的持久化映射,让它知道数据库的page字段对应Model的page属性:
config.tx_extbase.persistence.classes { TYPO3\CMS\Extbase\Domain\Model\Category { mapping { columns { page.mapOnProperty = page } } } }
如果是用自定义Model直接映射,也可以写:
config.tx_extbase.persistence.classes { YourVendor\YourExtension\Domain\Model\Category { mapping { tableName = sys_category columns { page.mapOnProperty = page } } } }
3. 最后一步:强制清理缓存
TYPO3的Extbase和Doctrine会缓存Model映射信息,所以一定要清空所有缓存,尤其是「Doctrine ORM缓存」和「Extbase Object Cache」,否则新配置不会生效。
额外检查:TCA的小细节
虽然你已经能在后台看到并保存字段,但可以确认下TCA的columns定义里,字段的config没有设置exclude = 1却没在TS里配置权限(不过一般后台能保存就没问题),另外确保字段已经加到了showitem里让后台显示。
做完这些步骤后,再用f:debug查看Category对象,就能看到page字段啦!
内容的提问来源于stack exchange,提问作者swiener
相关产品推荐
相关产品推荐

