【发布时间】:2021-06-22 15:46:20
【问题描述】:
我目前正在尝试让一个扩展在 Typo3 v10 中运行,它使用户能够显示、编辑、更新、禁用和启用其他用户帐户。
不幸的是,我遇到了无法使用禁用用户作为操作参数的问题:
/**
* Save user changes
*
* @param \Company\MyExtension\Domain\FeUser $feuser
* @return void
*/
public function updateAction(\Company\MyExtension\Domain\FeUser $feuser): void {}
它会导致以下错误:
Object of type \Company\MyExtension\Domain\FeUser with identity "3" not found.
根据我收集的信息,extbase 不依赖存储库的默认查询设置来创建对象,而是使用 PersistenceManager::createQueryForType 通过 QueryFactory::create 获取查询设置。这也是fewbugreports中列出的问题。
a suggestions 关于如何使用自定义 QueryFactory 为我的扩展设置不同的默认 QuerySettings,但这似乎不再适用于 Typo3 v10,至少我的自定义 QueryFactory 在注册后没有被使用。 .. 另外,如果这可行,它不会对所有通过控制器操作实例化的对象使用新的 QueryFactory,而不仅仅是这个扩展?
如何使用 Typo3 v10.4 正确处理我的扩展程序中的隐藏用户?
附: Another suggestion 是通过 initializeAction 提前获取对象,但这仅适用于未修改的模型而不是为对象设置新值时,因为它最终只会加载数据库值...
【问题讨论】:
-
通过参数传递对象假定您的 FeUser 没有被删除或隐藏(或以任何方式禁用,如开始/编辑时间)而不是获取用户作为操作参数,传递他的 UID 并编写自定义存储库中的查找器,避免使用禁用/删除对象的限制。
-
手动查找对象需要我手动将更改的值映射到获取的对象,跳过 extbase 的功能...
标签: typo3 extbase typo3-extensions typo3-10.x