Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

An error occurred while trying to call Controller->createAction()

Tags:

typo3

extbase

I am trying to create something with extbase, but the error-message I get is not very helpful. I took the blog_example extension as a guide. A (maybe) important difference is: I don't have a database table because I want to write a custom domain repository that connects to an external servive through REST.

The actual error message (displayed above the plugin, not as an exception message):

An error occurred while trying to call Tx_MyExt_Controller_SubscriptionController->createAction()


Classes/Controller/SubscriptionController:
Stripped down to the important parts.

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)
    { }

}

Classes/Domain/Model/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;
    }
}

Resources/Private/Templates/Subscription/new

<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>

Facts

  • Adding $subscriber = null removes the message. But $subscriber is null then
  • A var_dump($this->request->getArguments()); displays the form's fields
  • There is an index action, and it is also the first action defined in ext_localconf.php

The hints and solutions I found aren't working for me, so I hope someone can guide me into the right direction.

like image 359
pdu Avatar asked Jan 18 '26 04:01

pdu


1 Answers

I've got the same bug.

If you pass an Model as argument to an method, it will also validate the model fields.

I've had this annotation on my model property:

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

It validates the "@validate" annotation. The field in the database was empty so i got the error message

An error occurred while trying to call ...

It would be good if there was a better error message. You need to customize the validation annotation or verify that the property is not empty in the database

Hope it helps somebody

like image 59
alphanyx Avatar answered Jan 19 '26 18:01

alphanyx