Расширение TYPO3 createAction ничего не происходит
Вопрос
В настоящее время я пытаюсь написать простое расширение формы ввода:пользователь вводит значения в поле ввода, действие отправки вставляет значения в базу данных, а затем перенаправляет на внешний платежный сервис.
К сожалению, функция createAction не показывает никакой реакции после нажатия на кнопку отправки.
Для целей тестирования, Я просто хочу вывести текст после отправки.Но даже это не работает.
Если я использую точно такую же функцию flashMessageContainer в newAction, это работает:сообщение выводится на экран немедленно.Но когда я хочу показать это после нажатия на кнопку отправки, ничего, кроме перезагрузки страницы, не происходит.
В чем может быть проблема?
Ресурсы / Личные / Шаблоны / Оплата / New.html:
<f:form method="post" controller="Payment" action="create" id="newPayment" name="newPayment" object="{newPayment}">
<f:render partial="Payment/FormFields" />
<div class="buttons row">
<div class="col c6">
<f:form.submit value="{f:translate(key:'tx_chilipayment_domain_model_payment.submit')}" />
</div>
</div>
......
Классы / Контроллер / PaymentController.php:
<?php
namespace chilischarf\ChiliPayment\Controller;
class PaymentController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* paymentRepository
*
* @var \chilischarf\ChiliPayment\Domain\Repository\PaymentRepository
* @inject
*/
protected $paymentRepository;
/**
* action new
*
* @param \chilischarf\ChiliPayment\Domain\Model\Payment $newPayment
* @dontvalidate $newPayment
* @return void
*/
public function newAction(\chilischarf\ChiliPayment\Domain\Model\Payment $newPayment = NULL) {
$this -> view -> assign('newPayment', $newPayment);
}
/**
* action create
*
* @param \chilischarf\ChiliPayment\Domain\Model\Payment $newPayment
* @return void
*/
public function createAction(\chilischarf\ChiliPayment\Domain\Model\Payment $newPayment) {
$this -> flashMessageContainer -> add('Your new Payment was created.');
}
}
?>
Решение
Обычно вы не хотите, чтобы ваше createAction что-либо отображало.Вы просто хотите, чтобы он проверял и сохранял вводимые пользователем данные, а затем перенаправлял на другое действие, где, напримеротображается флэш-сообщение.Тем не менее, проблема, которую вы описываете, может иметь несколько причин, поэтому я укажу на несколько проблем, которые могут возникнуть у вас или с которыми ваша проблема может быть связана:
- У вас есть Create.html Шаблон в
Resources/Private/Templates/Payment/Create.html
?Это шаблон, который будет отображаться при выполнении действия create. - У вас есть
<f:flashMessages />
Просмотрщик в этом шаблоне?Поскольку вы ничего не добавляете к своему представлению в своем createAction (что совершенно нормально, если вы не планируете ничего здесь отображать, как упоминалось выше), это всего лишь "динамически" созданный контент. - Достигаете ли вы своего createAction после отправки формы?Или что-то с проверкой идет не так (в этом случае вы будете перенаправлены обратно на свой newAction с сообщением flashMessage по умолчанию о том, что произошла ошибка при попытке вызвать createAction)?Вы можете понять это, когда добавите
die();
к вашему творческому действию.После отправки вы увидите белую страницу, если ваше действие creatAction было вызвано успешно. - Является ли "создать" допустимым действием для вашего контроллера, как настроено в вашем ext_localconf.php?Если нет, добавьте его.