Forms 表单中的动态收件人

Forms 表单中的动态收件人,forms,typo3,fluid,extbase,Forms,Typo3,Fluid,Extbase,我有一个自定义扩展名,包含教师列表和详细信息。在详细信息页面上,我提供了一份带有代码的表格: <formvh:render persistenceIdentifier="1:/form_definitions/myform.yaml" /> 我需要将收件人设置为页面上显示的教师电子邮件。我该怎么做呢?你可以通过写一篇文章来实现这一点 在表单中添加一个隐藏字段,该字段保存教师的ID 在表单finisher中获取该id,并通过存储库加载教师模型 表单完成器的一个(不完整)示例,

我有一个自定义扩展名,包含教师列表和详细信息。在详细信息页面上,我提供了一份带有代码的表格:

<formvh:render persistenceIdentifier="1:/form_definitions/myform.yaml" />


我需要将收件人设置为页面上显示的教师电子邮件。我该怎么做呢?

你可以通过写一篇文章来实现这一点

  • 在表单中添加一个隐藏字段,该字段保存教师的ID
  • 在表单finisher中获取该id,并通过存储库加载教师模型
表单完成器的一个(不完整)示例,它从自定义模型加载收件人数据并将邮件发送到此特定数据:

class EmailToContactPersonFinisher extends EmailFinisher
{
/**
 * Executes this finisher
 * @see AbstractFinisher::execute()
 *
 * @throws FinisherException
 */
protected function executeInternal()
{
    /** @var FormRuntime $formRuntime */
    $formRuntime = $this->finisherContext->getFormRuntime();
    if ($formRuntime->getResponse()->getRequest()) {
        if ($formRuntime->getResponse()->getRequest()->hasArgument('contactPerson')) {
            $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
            /** @var ContactPersonRepository $repository */
            $contactPersonRepository = $objectManager->get(ContactPersonRepository::class);
            /** @var ContactPerson $contactPerson */
            $contactPerson = $contactPersonRepository->findByUid($formRuntime->getResponse()->getRequest()->getArgument('contactPerson'));
        }
    }
    // override contactPerson related options
    if ($contactPerson instanceof ContactPerson) {
        if ($contactPerson->getEmail()) {
            $recipientAddress = $contactPerson->getEmail();
        }
    }
    $this->setOption('recipientAddress', $recipientAddress);
    parent::executeInternal();
}
}
您还可以看看标准的emailFinisher,它可以让您快速了解体系结构。 sysext/form/Classes/Domain/Finishers/EmailFinisher.php