如何在 Typo3 6.2 Extbase 扩展中将对象从存储库加载到 <f:form.select/>

How to load objects from a repository into <f:form.select/> in Typo3 6.2 Extbase Extension

首先是我的具体问题:创建新预约时我应该怎么做才能在所有医生之间select?

现在背景:
从 Typo 4.7 更新到 6.2 后,我遇到了一些类似这样的问题:

创建新的 Appointment 时,我需要一个 select 字段,其中用户 select 是 Doctor.
所以我做了这个:

<f:form.select property="doctor" options="{doctors}" optionLabelField="lastName" />

我的 Extensionbuilder 设置:
Appointment 是具有 Doctor 类型关系的实体:"n:1"
Doctor 是一个扩展 \TYPO3\CMS\Extbase\Domain\Model\FrontendUser

的实体

在我的 AppointmentController 中我放了

/**
 * doctorRepository
 *
 * @var \Vendor\Extensionname\Domain\Repository\DoctorRepository
 * @inject
 */
protected $doctorRepository = NULL;

newAction 我写道:

$doctors = $this->doctorRepository->findAll();
...
$this->view->assignMultiple(array(
           'doctors' => $doctors,
        ));

这样 我的 select 字段中不会显示任何项目 ,即使我有一些 fe_users 类型 Doctor。 然后我试图通过这样做来查看 $doctors 里面的内容:

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($doctors);

但它说:

Caught exception: Unknown column 'fe_users.sorting' in 'order clause' 

编辑: 接受的答案解决了这个问题。

然后它显示了律师对象,但是select仍然是空的。 后来我自己找到了那个问题的答案(见我自己的答案)。

我认为您首先需要解决缺少列的问题。对我来说,似乎在 TYPO3 的更新过程中,数据库列 fe_users.sorting 被删除了。也许它在 ext_tables.sql 文件中没有正确定义,数据库分析器建议删除它? TYPO3 核心中不存在此类字段,因此必须事先从您或第三方扩展中添加。请执行以下操作:

  1. 检查数据库是否存在 fe_users.zzz_deleted_sorting,如果存在,将其名称更改为 fe_users.sorting 并将字段定义添加到您的 ext_tables.sql 文件中:

    排序 int(11) 默认“0”不为空,

  2. 如果没有字段fe_users.zzz_deleted_sorting,说明已经从数据库中删除了。请将第 1 点的 SQL 代码添加到 ext_tables.sql 并使用安装工具执行数据库比较。它将建议您创建新字段 - fe_users.sorting。请创建它。

另请检查数据库结构是否存在其他重要差异。数据库分析器将向您展示所有这些。

解决数据库问题后,如果有任何更改,请提供反馈。那我们就可以继续下一期了。

编辑:

数据库问题已解决,我们可以更进一步。

I shows the lawyer-objects, but the select is still empty

您可能从数据库得到空响应,因为未定义 storagePid。 Extension Builder 可能已经为您创建了 TypoScript 配置。请执行以下操作:

  1. 在您的扩展目录中找到文件 Confiugration/TypoScript/constants.txt。

  2. 查看BE中医生记录是在哪个Page ID上创建的。

  3. 用适当的页面 ID 号填充 storagePid。 StoragePid 在路径中:plugin.tx_[pluginkey].persistence.storagePid。它也应该由 Extension Builder 定义,但它的值可能为空。

我找到了问题的第二个原因:
在我的 <f:render...> 中,我没有通过我的医生作为论据!

...arguments="{..., doctors:doctors}"/>