Вопрос

В настоящее время я пытаюсь написать простое расширение формы ввода:пользователь вводит значения в поле ввода, действие отправки вставляет значения в базу данных, а затем перенаправляет на внешний платежный сервис.

К сожалению, функция 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 что-либо отображало.Вы просто хотите, чтобы он проверял и сохранял вводимые пользователем данные, а затем перенаправлял на другое действие, где, напримеротображается флэш-сообщение.Тем не менее, проблема, которую вы описываете, может иметь несколько причин, поэтому я укажу на несколько проблем, которые могут возникнуть у вас или с которыми ваша проблема может быть связана:

  1. У вас есть Create.html Шаблон в Resources/Private/Templates/Payment/Create.html?Это шаблон, который будет отображаться при выполнении действия create.
  2. У вас есть <f:flashMessages /> Просмотрщик в этом шаблоне?Поскольку вы ничего не добавляете к своему представлению в своем createAction (что совершенно нормально, если вы не планируете ничего здесь отображать, как упоминалось выше), это всего лишь "динамически" созданный контент.
  3. Достигаете ли вы своего createAction после отправки формы?Или что-то с проверкой идет не так (в этом случае вы будете перенаправлены обратно на свой newAction с сообщением flashMessage по умолчанию о том, что произошла ошибка при попытке вызвать createAction)?Вы можете понять это, когда добавите die(); к вашему творческому действию.После отправки вы увидите белую страницу, если ваше действие creatAction было вызвано успешно.
  4. Является ли "создать" допустимым действием для вашего контроллера, как настроено в вашем ext_localconf.php?Если нет, добавьте его.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top