2

我正在尝试使用 extbase 创建一些东西,但是我收到的错误消息并不是很有帮助。我将 blog_example 扩展作为指南。一个(也许)重要的区别是:我没有数据库表,因为我想编写一个通过 REST 连接到外部服务的自定义域存储库。

实际的错误信息(显示在插件上方,不是异常信息):

尝试调用 Tx_MyExt_Controller_SubscriptionController->createAction() 时出错


Classes/Controller/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
  • Avar_dump($this->request->getArguments());显示表单的字段
  • 有一个索引动作,它也是定义的第一个动作ext_localconf.php

我发现的提示和解决方案对我不起作用,所以我希望有人能引导我走向正确的方向。

4

4 回答 4

7

我有同样的错误。

如果您将模型作为参数传递给方法,它还将验证模型字段。

我的模型属性上有这个注释:

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

它验证“@validate”注释。数据库中的字段为空,所以我收到错误消息

An error occurred while trying to call ...

如果有更好的错误信息就好了。需要自定义验证注解或者验证数据库中属性不为空

希望它可以帮助某人

于 2014-01-31T08:56:11.130 回答
3

另外:检查您的模型和 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/

于 2014-04-02T22:01:02.920 回答
2

只需覆盖您控制器中的模板方法 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 . '()';
}
于 2012-03-28T15:45:21.557 回答
1

“从头开始,它可以工作,如果你比较它,你有相同的代码,但是”的经典案例。

我更新了问题中的代码,也许它可以帮助某人。

于 2012-02-02T09:37:02.320 回答