Динамический получатель в форме - PullRequest
0 голосов
/ 16 мая 2019

У меня есть собственное расширение со списком и подробностями учителей. На странице с подробностями добавляю форму с кодом:

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

Мне нужно указать получателя с адресом электронной почты учителя, показанным на странице. Как я могу это сделать?

1 Ответ

1 голос
/ 24 мая 2019

Вы можете достичь этого, написав пользовательский финишер формы .

  • Добавьте в форму скрытое поле, содержащее идентификатор учителя
  • Извлеките этот идентификатор в своем финишере и загрузите модель учителя по своему репозиторию

(не полный) пример финишера, который загружает данные получателя из пользовательской модели и отправляет почту на этот конкретныйdata:

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 / форма / Классы / домен / Finishers / EmailFinisher.php

...