Произошла ошибка при попытке вызвать Controller- ›createAction ()

Я пытаюсь создать что-то с помощью extbase, но получаемое сообщение об ошибке не очень помогает. Я взял за основу расширение blog_example. Важное (возможно) отличие: у меня нет таблицы базы данных, потому что я хочу написать собственный репозиторий домена, который подключается к внешнему серверу через REST.

Фактическое сообщение об ошибке (отображается над плагином, а не как сообщение об исключении):

Произошла ошибка при попытке вызвать Tx_MyExt_Controller_SubscriptionController-> createAction ()


Классы / Контроллер / Контроллер подписки:
Урезаны важные части.

class Tx_MyExt_Controller_SubscriptionController extends Tx_Extbase_MVC_Controller_ActionController 
{
    /**
     * @var Tx_MyExt_Domain_Repository_SubscriberRepository
     */
    protected $subscriberRepository;


    /**
     * @return void
     */
    public function initializeAction()
    {
        $this->subscriberRepository = t3lib_div::makeInstance('Tx_MyExt_Domain_Repository_SubscriberRepository');
    }


    /**
     * @param Tx_MyExt_Domain_Model_Subscriber $subscriber
     * @dontvalidate $subscriber
     * @return  string      The rendered view
     */
    public function newAction(Tx_MyExt_Domain_Model_Subscriber $subscriber = null)
    {
            $this->view->assign('subscriber', $subscriber);
    }

    /**
     * @param Tx_MyExt_Domain_Model_Subscriber $subscriber
     * @return  string      The rendered view
     */
    public function createAction(Tx_MyExt_Domain_Model_Subscriber $subscriber)
    { }

}

Классы / Домен / Модель / Подписчик

class Tx_MyExt_Domain_Model_Subscriber extends Tx_Extbase_DomainObject_AbstractEntity 
{
    /**
     * @var string
     * @dontvalidate
     */
    protected $email = '';



    /**
     * @param string $email
     * @return void
     */
    public function setEmail($email) 
    {
        $this->email = $email;
    }

    /**
     * @return string
     */
    public function getEmail() 
    {
        return $this->email;
    }
}

Ресурсы / Частные / Шаблоны / Подписка / новые

<f:form action="create" controller="Subscription" objectName="Subscriber" object="{subscriber}" method="post">
    <f:form.textfield property="email"></f:form.textfield>
    <f:form.submit value="submit"></f:form.submit>
</f:form>

Факты

  • Добавление $subscriber = null удаляет сообщение. Но $subscriber это null тогда
  • var_dump($this->request->getArguments()); отображает поля формы
  • Есть действие индекса, и это также первое действие, определенное в ext_localconf.php

Подсказки и решения, которые я нашел, не работают для меня, поэтому я надеюсь, что кто-то может направить меня в правильном направлении.


person pdu    schedule 01.02.2012    source источник
comment
Просто чтобы проверить: есть ли у вас геттер и сеттер в вашей Subscriber модели?   -  person konsolenfreddy    schedule 01.02.2012
comment
Ага. добавлен сеттер / получатель к вопросу   -  person pdu    schedule 01.02.2012


Ответы (4)


У меня такая же ошибка.

Если вы передадите модель в качестве аргумента методу, он также проверит поля модели.

У меня есть эта аннотация к свойству модели:

/**
 *
 * @var \string
 * @validate NotEmpty
 */

Он проверяет аннотацию «@validate». Поле в базе данных было пустым, поэтому я получил сообщение об ошибке

An error occurred while trying to call ...

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

Надеюсь, это кому-то поможет

person alphanyx    schedule 31.01.2014
comment
Это проблема, которая у меня была. - person lufi; 19.03.2014
comment
Мне это тоже помогло. Поле не было задано как обязательное в TCA, но в модели все еще было * @validate NotEmpty. Просмотр подробностей завершился неудачно с An error occurred while trying to call NAMESPACE\Myext\Controller\ItemController->listAction(). (Причина, по которой он показывает listAction для подробного просмотра, заключается в том, что есть пересылка из списка - ›деталь в контроллере) - person Urs; 06.05.2014

Дополнительно: проверьте все проверки в вашей модели и вашем TCA. Если поле помечено как @validate NotEmpty в вашей модели и не помечено соответствующим образом в TCA, запись может быть сохранена без учета настроек @validate в модели. Это может произойти, если вы измените Модель и / или TCA после создания записей.

Пример. Поле "текстовое поле" настроено как не проверяемое как в TCA, так и в модели. Вы создаете новую запись и сохраняете ее, не заполняя поле «текстовое поле» (можно, оно не настроено на проверку). Затем вы измените параметр модели «текстовое поле» на @validate NotEmpty, а затем попытаетесь показать запись на FE, вы получите сообщение об ошибке.

Решение для этого примера: просто удалите валидацию в вашей модели ИЛИ проверьте валидации в TCA и модели, чтобы они работали вместе.

--

Сообщение в немецком блоге описывает это решение: http://www.constantinmedia.com/2014/04/typo3-extbase-an-error-occurred-while-trying-to-call-anyaction/

person Sir James Squander    schedule 02.04.2014

просто переопределите метод шаблона getErrorFlashMessage в контроллере yout, чтобы предоставить настраиваемое сообщение об ошибке ...

/**
 * A template method for displaying custom error flash messages, or to
 * display no flash message at all on errors. Override this to customize
 * the flash message in your action controller.
 *
 * @return string|boolean The flash message or FALSE if no flash message should be set
 * @api
 */
protected function getErrorFlashMessage() {
    return 'An error occurred while trying to call ' . get_class($this) . '->' . $this->actionMethodName . '()';
}
person bazen    schedule 28.03.2012
comment
проблема не в том, что я хочу избавиться от вспышки, а в том, чтобы избавиться от ошибки, мешающей работе плагина. - person pdu; 14.04.2012

классический случай «начать с нуля, и он работает, а если сравнивать, то код тот же».

Обновил код в вопросе, может кому поможет.

person pdu    schedule 02.02.2012
comment
да, вам просто нужно убедиться, что присутствует соответствующий TCA, помимо допустимых файлов ext _ *. php. - person pdu; 16.05.2013