在TYPO3 6.2中,如何在Extbase action controller和Fluid template partial之间丢失前端用户组列表?

在TYPO3 6.2中,如何在Extbase action controller和Fluid template partial之间丢失前端用户组列表?,typo3,fluid,extbase,typo3-6.2.x,typo3-extensions,Typo3,Fluid,Extbase,Typo3 6.2.x,Typo3 Extensions,我正在使用TYPO3 CMS 6.2.12和Extension Builder 6.2.0对报表类进行建模,并构建一个扩展来管理它 领域驱动的设计要求之一是报表作者必须是登录的前端用户。第二个要求是,作者在输入报表信息时,从前端用户组列表中选择一个组 到目前为止,ExtensionBuilder在生成代码和文件方面完成了大部分工作。它构建了报告模型、所有动作控制器、流体模板和部分。这是一个巨大的飞跃。我没有让它为前端用户或他们的组构建模型,而是选择从现有类中注入依赖项。我现在正试图解决用户和用户

我正在使用TYPO3 CMS 6.2.12和Extension Builder 6.2.0对报表类进行建模,并构建一个扩展来管理它

领域驱动的设计要求之一是报表作者必须是登录的前端用户。第二个要求是,作者在输入报表信息时,从前端用户组列表中选择一个组

到目前为止,ExtensionBuilder在生成代码和文件方面完成了大部分工作。它构建了报告模型、所有动作控制器、流体模板和部分。这是一个巨大的飞跃。我没有让它为前端用户或他们的组构建模型,而是选择从现有类中注入依赖项。我现在正试图解决用户和用户组的需求,主要是通过向“newAction”控制器和“FormFields”的Fluid部分添加代码

在我的开发服务器上,我可以成功地输入新报告。我提出了一个新报告的网络表单;我可以输入信息并提交新报告;新创建的报告显示在列表页面和数据库中;我可以在web浏览器中显示单个报告

我现在的问题是前端用户组列表不会出现在新报表的web表单中

在过去的几天里,我一直在尝试各种各样的实验

  • Extbase Fluid书中的[“博客示例之旅”][blogexample]提供了一个很好的例子,让我相信我所尝试的应该是可行的。[“替代路线:创建新帖子”][newposting]在阅读了本章其余部分后,作为指南特别有用

  • TYPO3 Wiki的[“依赖项注入”文章][depinj]似乎说我们只需要
    @inject
    注释,尽管这篇文章警告不要使用
    t3lib_div::makeInstance
    ,但我发现该方法的重新定位版本在下面的测试中变得很有用

  • 下面代码中的流体调试指令来自TYPO3 Wiki的[Fluid page][Fluid]。不过,在测试过程中,它似乎只给出了打字脚本设置变量

  • 我发现了一些堆栈溢出的文章,包括Vertex询问的[“如何在VHS的AllowViewHelper中设置部分中的FrontendUserGroup?”[so1],[“如何:在typo3 v4.5中使用Tx_Extbase_Domain_Repository_FrontendUserRepository”][so2]由新手Qs询问的[“typo3-调用另一个存储库”][so3]由Jeppe Donslund询问的,以及[cili要求“Typo3 6.1 Extbase-选择所有fe用户”][so4]。上一篇文章给出了我在测试中使用的
    $FeuerRepository
    片段,如下所示。倒数第二篇文章给出了警告,“添加依赖项注入后,必须清除缓存!“它没有说是哪个缓存,这导致了我彻底地清除了这次测试所能想到的一切

今天,我用下面显示的代码运行了我的最新测试。在TYPO3后端,我刷新了前端缓存和常规缓存。我进入安装工具的“重要操作”并单击“清除所有缓存”“这是成功的。然后我进入扩展管理器,在那里我停用并重新激活了扩展。然后,我在phpstorm8.0.3中运行了调试,它跟踪了事件。在我的开发网站上,我登录到前端。我导航到报告列表页面,并单击“新建报告”。在“newAction()”中设置了断点后,PhpStorm的手表告诉我,他们对“$frontendUserRepository”和“$frontendUserGroupRepository”都有一个“错误评估代码”,我不知道如何找到更多信息。(我是PhpStorm的新手。)然而,“$feUserRepository”变成了一个类型为“TYPO3\CMS\Extbase\Domain\Model\FrontendUser”的对象,包含许多项,包括一个“identifierMap”数组,该数组包含“TYPO3\CMS\Extbase\Domain\Model\FrontendUser”和“TYPO3\CMS\Extbase\Domain\Model\frontendusergroup”项的数组。frontenduser数组包含一个“TYPO3\CMS\Extbase\Domain\Model\frontenduser”对象,该对象包含正确的用户记录。frontendusergroup数组包含2个`TYPO3\CMS\Extbase\Domain\Model\frontendusergroup`对象,这些对象包含正确的用户组记录。在下一个调试步骤中,“TYPO3\CMS\Extbase\Domain\Model\FrontendUser$user”对象包含相同的正确用户记录。尽管如此,新报告web表单的输出HTML页面还是为我的作者的用户名显示和作者的用户组选择列表生成了空白。(Extbase实用工具调试器仅显示不相关的打字脚本设置。)

这个测试让我相信Extbase`newAction`控制器可以找到`feuerrepository`的前端用户组,但是在`frontendUserRepository`和`frontendUserGroupRepository`方面遇到了问题。然而,下面的第二个空的break标记输出行表明,即使是分配给“$FeuerRepository”的“authortest”变量也不知何故在流向Fluid的过程中丢失了

我试图将对包的其余部分的影响降到最低,我能找到的告诉我下面的代码应该可以工作。但事实并非如此

你能告诉我错过了什么吗

(请原谅我丢失了超链接。Stack Overflow告诉我,“你需要至少10个声誉才能发布2个以上的链接。这是我的第一个问题,所以这显然还没有发生。)

从myextension\Classes\Controller\ReportController.php: 从myextension\Resources\Private\Templates\Report\New.html:

从myextension\Resources\Private\Partials\Report\FormFields.html:
{u all}
{author.username}
{authortest.username}


从新报告的web表单中的HTML输出:


作者组Id


您的
变量
不会传递给分部,因此
{groups}
不是内部变量
/**
 * reportRepository
 * 
 * @var \MyVendor\Myextension\Domain\Repository\ReportRepository
 * @inject
 */
protected $reportRepository = NULL;

/**
 * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
 * @inject
 */
protected $frontendUserRepository;

/**
 * @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserGroupRepository
 * @inject
 */
protected $frontendUserGroupRepository;

/**
 * action new
 *
 * @param \MyVendor\Myextension\Domain\Model\Report $newReport
 * @ignorevalidation $newReport
 * @return void
 */
public function newAction(\MyVendor\Myextension\Domain\Model\Report $newReport = NULL) {
    $this->view->assign('newReport', $newReport);
    $this->view->assign('author', $this->frontendUserRepository->findByUid($GLOBALS['TSFE']->fe_user->user['uid']));
    $this->view->assign('groups', $this->frontendUserGroupRepository->findAll());
    $feUserRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance( 'TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository' );
    $user = $feUserRepository->findByUid( 1 );
    $this->view->assign('authortest', $user);
}
<f:form action="create"  name="newReport" object="{newReport}">
<f:render partial="Report/FormFields" />
<f:form.submit value="Create new" />
</f:form>
<f:debug title="All available variables">{_all}</f:debug>
{author.username}<br />
{authortest.username}<br />
<label for="authorGroupId"><f:translate key="tx_myextension_domain_model_report.author_group_id" /></label><br />
    <f:form.select property="authorGroupId" options="{groups}" optionLabelField="title" optionValueField="uid" /><br />
<br />
<br />
<label for="authorGroupId">Author Group Id</label><br />
    <select name="tx_myextension_myextensionauthorplugin[newReport][authorGroupId]"><option value=""></option>
</select><br />
<f:render partial="Report/FormFields" arguments="{groups : groups}" />