TYPO3扩展思想实验:一次编辑新闻条目和评论条目?

时间:2018-01-31 07:52:43

标签: typo3

昨天我发布了一个类似但更复杂/长/案例的问题,我想重新制定它并让它更容易联系起来。但请记住,它只是一个简化的,而不是现实生活中的例子,因此我无法提供真实的代码。 我只需要知道这个想法是否可行,或者我是否应该寻找其他解决方案并且不要浪费时间

我有一个叫做新闻的课程。此类课程在其特定控制器中具有编辑和更新操作。在它旁边,附加了类注释的对象(与这些注释对象的关系存储在对象存储中)。通常,正如您可以想象的那样,您可以单独编辑新闻和评论,因为它们具有单独的控制器及其操作。但是:假设有一种方法可以一次性编辑新闻对象/记录及其评论吗?

所以基本上,新闻类的editAction为新闻对象分配了相应的对象存储属性" comments"在视图和视图中,我可以通过对象存储中的关系轻松访问每个注释,并将它们实现为一个表单,以便更改它们的值......

简化的updateAction看起来像这样(请记住属性"评论"新闻是评论的对象存储):

       public function updateAction(\...\...\Domain\Model\news $news)
        {
            $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
            $commentRepository = $objectManager->get(\...\...\Domain\Repository\commentRepository::class);

             foreach($news->getComments() as $comment){
                $commentRepository->update($comment);   
            }

            $this->newsRepository->update($news);
            $this->redirect('list');
        }

(简化)编辑模板如下所示:

<f:form action="update" name="news" object="{news}" >

<f:form.textarea property="newsentry" cols="40" rows="15" /><br />

<f:for each="{news.comments}" as="comment" >
        <f:form.textarea property="commententry" value="{comment.commententry}" /><br />
</f:for>

<f:form.submit value="Save" />

你在这个假设的例子中看到了问题吗?只有新闻对象被传递给updateAction,当然还有对象存储属性(&#34; comments&#34;),其中存储与相应注释对象的关系,传递给updateAction,而不是更改的注释本身。因此,只有更改的newsentry持久化而不是更改的commnetentries,即使我在updateAction中有必要的代码来执行此操作。

所以,伙计们......这个问题是否有任何解决办法,或者根本不可能,我应该寻找其他方法来寻找解决方案并且不要浪费时间在这上面?

1 个答案:

答案 0 :(得分:1)

我通过获取每条评论的密钥在我的项目中处理它,因此您可以使用该属性。例如:

<f:for each="{news.comments}" as="comment" key="commentIndex">
    <f:form.hidden property="comments.{commentIndex}.__identity" value="{comment.uid}" />
    <f:form.textarea property="comments.{commentIndex}.commententry" value="{comment.commententry}" />
</f:for>

重要的是__identity参数为Extbase提供了重要的属性,在这里编辑了评论记录。

您不需要更新updateAction中的每条评论,它会通过更新新闻记录自动完成。