表单中的动态收件人
Dynamic recipient in form
我有一个包含教师列表和详细信息的自定义扩展。在详细信息页面上,我包含一个带有代码的表单:
<formvh:render persistenceIdentifier="1:/form_definitions/myform.yaml" />
我需要用页面上显示的老师邮箱设置收件人。我该怎么办?
您可以通过编写 custom form finisher.
来实现
- 在您的表单中添加一个隐藏字段,其中包含教师的 ID
- 在您的表单完成器中获取该 ID 并通过您的存储库加载 Teacher 模型
表单完成器的一个(不完整)示例,它从自定义模型加载收件人数据并将邮件发送到此特定数据:
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
我有一个包含教师列表和详细信息的自定义扩展。在详细信息页面上,我包含一个带有代码的表单:
<formvh:render persistenceIdentifier="1:/form_definitions/myform.yaml" />
我需要用页面上显示的老师邮箱设置收件人。我该怎么办?
您可以通过编写 custom form finisher.
来实现- 在您的表单中添加一个隐藏字段,其中包含教师的 ID
- 在您的表单完成器中获取该 ID 并通过您的存储库加载 Teacher 模型
表单完成器的一个(不完整)示例,它从自定义模型加载收件人数据并将邮件发送到此特定数据:
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