我正在尝试用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
然后var_dump($this->request->getArguments());
显示表单的字段ext_localconf.php
我找到的提示和解决方案对我不起作用,所以我希望有人能引导我走向正确的方向。
答案 0 :(得分:6)
我有同样的错误。
如果将Model作为参数传递给方法,它还将验证模型字段。
我的模型属性上有这个注释:
/**
*
* @var \string
* @validate NotEmpty
*/
验证“@validate”注释。 数据库中的字段为空,因此我收到错误消息
An error occurred while trying to call ...
如果有更好的错误消息会很好。 您需要自定义验证注释或验证数据库中的属性是否为空
希望它有助于某人
答案 1 :(得分:3)
另外:检查模型和TCA中的所有验证。如果某个字段在模型中标记为@validate NotEmpty
且未在TCA中正确标记,则可以忽略模型中的@validate设置保存记录。如果在创建记录后更改模型和/或TCA,则会发生这种情况。
示例:
在“TCA”和“模型”中,字段“textfield”设置为不验证。您创建一个新记录并保存它而不填写“textfield”字段(您可以,它未设置为验证)。然后,您将模型设置'textfield'更改为@validate NotEmpty
,然后尝试在FE上显示记录,您将收到错误。
该示例的解决方案: 只需删除模型中的验证或检查TCA和模型中的验证,以便它们一起工作。
-
德国博客文章介绍了此解决方案:http://www.constantinmedia.com/2014/04/typo3-extbase-an-error-occurred-while-trying-to-call-anyaction/
答案 2 :(得分:2)
只需覆盖控制器中的模板方法get error liveMessage即可提供自定义错误消息...
/**
* 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 . '()';
}
答案 3 :(得分:1)
经典案例“从头开始,它起作用,如果你比较它,你有相同的代码,”。
我更新了问题中的代码,也许它可以帮助某人。