Произошла ошибка при попытке вызвать Controller-> createAction () - PullRequest
1 голос
/ 01 февраля 2012

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

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

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


Классы / контроллер / SubscriptionController:
Раздетый до важных частей.

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, тогда
  • A var_dump($this->request->getArguments()); отображает поля формы
  • Существует индексное действие, и это также первое действие, определенное в ext_localconf.php

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

Ответы [ 4 ]

6 голосов
/ 31 января 2014

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

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

У меня была аннотация на свойстве модели:

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

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

An error occurred while trying to call ...

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

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

3 голосов
/ 03 апреля 2014

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

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

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

-

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

2 голосов
/ 28 марта 2012

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

/**
 * 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 . '()';
}
1 голос
/ 02 февраля 2012

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

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

...