Как получить почтовые переменные из формы через пользовательскую функцию - PullRequest
0 голосов
/ 01 апреля 2019

На веб-сайте Typo3 интегрирована форма. Действие должно быть направлено пользовательской функции Typoscript.

Это то, что я пробовал до сих пор:

Код формы жидкости (отрывок):

<form action="{f:cObject(typoscriptObjectPath: 'lib.mynlreg')}" method="post">
  <input type="text" name="email" placeholder="Ihre E-Mail-Adresse">
  <input type="submit" name="send" value="Jetzt registrieren" class="submit" />
</form>

Typoscript lib:

lib.mynlreg = USER_INT
lib.mynlreg {
   userFunc = Vendor\Extension\myClass->myFunction
}

И класс:

class myClass {

  public function myFunction($content, $conf) {
      $arguments = $this->request->getArguments();
      $formEmail = $arguments['email'];
      return '<div>' . $formEmail . '</div>';
  }

}

Я ожидаю получить содержимое поля формы «электронная почта», но после отправки страницы выдает ошибку. Вопрос в том, как я могу получить переменные записей в функции пользователя? Спасибо за любую помощь!

1 Ответ

0 голосов
/ 02 апреля 2019

$this->request недоступно в пользовательском режиме. Как говорит Гаутамсинь Мори, вы должны использовать \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('email');, однако я не уверен, что вы понимаете, что делает f:cObject ViewHelper.

С этим кодом ваш HTML перед отправкой формы будет:

<form action="<div></div>" method="post">
  <input type="text" name="email" placeholder="Ihre E-Mail-Adresse">
  <input type="submit" name="send" value="Jetzt registrieren" class="submit" />
</form>

Ваш HTML после отправки будет:

<form action="<div>filledInEmail</div>" method="post">
  <input type="text" name="email" placeholder="Ihre E-Mail-Adresse">
  <input type="submit" name="send" value="Jetzt registrieren" class="submit" />
</form>

Я бы порекомендовал сделать для этого расширение, но если вы действительно хотите / должны сделать это так, я думаю, что вы ищете что-то вроде:

<f:cObject typoscriptObjectPath="lib.mynlreg" />
<form action="{uri.page(addQueryString: 1)}" method="post">
  <input type="text" name="email" placeholder="Ihre E-Mail-Adresse">
  <input type="submit" name="send" value="Jetzt registrieren" class="submit" />
</form>

Это создаст форму с действием для текущей страницы (включая любую строку запроса). Затем вам нужно изменить userFunc, чтобы он возвращал пустую строку, если форма не была отправлена. Что-то вроде:

class myClass {
    public function myFunction($content, $conf) {
        $formEmail = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('email');
        if (empty($formEmail)) {
            return '';
        }
        return '<div>' . $formEmail . '</div>';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...