Расширение 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.');
        }
    }
    ?>

person xxx    schedule 03.06.2014    source источник


Ответы (1)


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

  1. У вас есть шаблон Create.html в Resources/Private/Templates/Payment/Create.html? Это шаблон, который будет отображать действие создания.
  2. У вас есть <f:flashMessages /> viewHelper в этом шаблоне? Поскольку вы ничего не присваиваете своему представлению в своем createAction (что совершенно нормально, если вы не планируете здесь ничего отображать, как упоминалось выше), это только «динамически» созданный контент.
  3. Вы достигаете своего createAction после отправки формы? Или что-то с проверкой идет не так (в этом случае вы будете перенаправлены обратно к вашему newAction с flashMessage по умолчанию, что произошла ошибка при попытке вызвать createAction)? Вы можете понять это, когда добавите die(); в свой createAction. После отправки вы увидите белую страницу, если ваше creatAction было вызвано успешно.
  4. Является ли «создание» допустимым действием для вашего контроллера, как настроено в вашем ext_localconf.php? Если нет, добавьте его.
person Daniel    schedule 03.06.2014
comment
Большое спасибо - это решило мою проблему: у меня было неправильное предположение, что createAction остается в новом шаблоне. Как вы предложили, я создал шаблон Create и убедился, что все было зарегистрировано в ext_localconf.php. Теперь тестовый вывод работает! - person xxx; 04.06.2014