前端控制器中的Typo3插件内联记录

时间:2018-09-24 11:00:58

标签: php typo3 extbase

我正在尝试使用extbase创建Typo3扩展,偶然发现了一个问题。 到目前为止,我所做的是: 我为后端创建了可通过flexform编辑的插件。该插件允许动态更改某些字段,因此flexform使用的内联记录可以成功存储在数据库中自己的表 tx_jwfrontendusermanager_editorfields 中。表条目的pid与它们附加到的内容对象的pid相同,表中的附加字段保存内容对象的ID。 到目前为止,后端工作正常,我可以毫无问题地为内容对象创建/编辑/删除内联记录。

不幸的是,我似乎无法弄清楚如何在前端的ActionController中访问内联记录,也找不到任何有关此操作的文档。有人能指出我正确的方向吗?

到目前为止,我已经尝试过:

第一种(原始)方法:像从表单中访问其他字段一样,访问flexform内联字段。这仅返回数字“ 7”。显然,这不是要用这种方式。

第二种方法:我为EditorFields表创建了一个模型/存储库,并使用Typoscript将Model类映射到该表。映射本身似乎工作正常。不幸的是,我不能仅选择连接到当前内容对象的记录。调用Repository-> findAll()会返回一个空数组。 我调试了findAll命令的SQL查询,发现了三个问题:

  1. 查询通过 tx_jwfrontendusermanager_editorfield pid 字段进行过滤,但是使用了错误的页面ID。使用的pid是我在插件的“记录存储页面”字段中选择的pid,而不是内容对象之一。

  2. 查询不会过滤内容对象ID,但会显示页面上所有内容对象的所有记录。

  3. 查询将按其他

    进行过滤
    `tx_jwfrontendusermanager_editorfield`.`type` = "\Jw301\JwFrontendusermanager\Domain\Model\EditorField"
    

    这没有任何意义,因为所有记录都没有将 type 字段设置为此类。后端使用该类型来区分不同类型的记录。这样,查询将永远不会有任何结果。

那么,如何以存储库找到正确记录的方式对此进行更改?这是正确的方法吗?

第三种方法:由于“存储库”方法不成功,我试图通过创建自定义SQL查询来自己获取记录。一般而言,这是可行的,但我仍然无法为我筛选正确的记录。 我可以使用

轻松获得当前页面ID
$GLOBALS['TSFE']->page['uid']

但是似乎没有办法在ActionController中获取内容对象ID。我发现许多互联网消息说我应该使用

$cObj = $this->configurationManager->getContentObject();
$cObj->data['uid']
从ActionController内

可以访问当前的内容对象ID,但对我来说却没有用。我在项目的每个ActionController中都尝试过此操作,但是 uid 字段从未出现过。我得到的 $ cObj 类型为 ContentObjectRenderer ,但是 data 数组始终为空。

如何从ActionController中访问内容对象uid?

谢谢您的帮助或提示,使我朝正确的方向前进。

0 个答案:

没有答案