环境:Mac OS X Lion,PHP 5.3.10,MySQL 5.X,TYPO3 4.7.1,Extbase 4.7.1,Fluid 4.7.0
我在extbase中出现了一个奇怪的验证错误,已经连续几天了。
Tx_Foo_Controller_FeUserController包含以下两个操作:
/** * @param $feUser * @return void * @dontvalidate $feUser */ public function registerAction(Tx_Foo_Domain_Model_FeUser $feUser = NULL )
和
/** * @param Tx_Foo_Domain_Model_FeUser $feUser * @param string $password2 * @return void */ public function createAction( Tx_Foo_Domain_Model_FeUser $feUser ,$password2 )
两项行动的内容:
$this->view->assign('feUser', $feUser);
register.html具有以下形式:
<f:flashMessages />
<f:form.errors>
<div class="error">
{error.message}
<f:if condition="{error.propertyName}">
<p>
<strong>{error.propertyName}</strong>:
<f:for each="{error.errors}" as="errorDetail">
{errorDetail.message}
</f:for>
</p>
</f:if>
</div>
</f:form.errors>
<f:form object="{feUser}" objectName="feUser" class="form-horizontal" id="fooRegisterForm"
controller="FeUser" action="create" noCache="1" noCacheHash="1">
<f:form.textfield type="email" property="email" value="{feUser.email}"/>
<f:form.textfield property="password" value=""/>
<f:form.textfield name="password2" value=""/>
</f:form>
并且createAction中只有一些“OK”文本。
问题是:每次我向createAction()方法添加@validate注释时,我都会收到此错误:
An error occurred while trying to call Tx_Foo_Controller_FeUserController->createAction()
如果我使用自定义验证器或捆绑验证器,则没有区别。
createAction()
的示例* @validate $password2 Tx_Extbase_Validation_Validator_IntegerValidator
整数用于引发错误。
自定义验证器类似于Tx_Foo_Domain_Validator_FeUserValidator,您无需添加@validation标记。
自定义验证器:
/**
* Validation of given Params
*
* @param Tx_Foo_Domain_Model_FeUser $feUser
* @return void
*/
public function isValid($feUser)
{
$this->addError('Passwords are not RSA strings', 1297418974 );
return false;
}
如果有退货声明则无关紧要......
我查了一下Tx_Extbase_MVC_Controller_ActionController - &gt; callActionMethod()和整个验证过程(通过var_dump和debug_backtrace等)来弄清楚这个错误发生的原因以及错误消息没有输出的原因。这一切都很奇怪......所以也许有人在这里说: - )
如果我在我的feUser类的模型中添加@validation标记,则会出现同样的错误 @validate notEmpty
通过typoscript进行Extbase配置
config.tx_extbase {
features.rewrittenPropertyMapper = 1
persistence{
storagePid = 5
enableAutomaticCacheClearing = 1
updateReferenceIndex = 0
classes {
Tx_Foo_Domain_Model_FeUser {
mapping {
tableName = fe_users
columns {
lockToDomain.mapOnProperty = lockToDomain
}
}
}
}
}
}
提前多多感谢。
PS:当然在问这里之前我搜索了很多。答案 0 :(得分:2)
在我的情况下会出现此错误,因为缺少extbase referrer
。如果没有referrer
,则extbase将抛出默认消息。
因为我没有形式而只是一个链接,我必须手动添加referrer
:
/index.php?id=10&tx_bieval_pi1[send]=1&tx_bieval_pi1[hash]=12345&tx_bieval_pi1[__referrer][actionName]=index&tx_bieval_pi1[action]=form&tx_bieval_pi1[controller]=Participation
这就是诀窍
答案 1 :(得分:1)
在我的情况下,我通过在typoscript设置中注释这一行解决了这个问题:
答案 2 :(得分:0)
您应该始终牢记的一点是,有一个缓存,您无法通过按下按钮进行清理。 Extbase反射缓存会缓存模型和控制器中的所有注释。所以在开发过程中,要避免很多挫折,请禁用这个糟糕的事情。
我曾写过一篇关于它的博文: http://www.alexanderschnitzler.de/2012/01/disable-extbase-reflection-cache-during-development-typo3-4-6/
所以请先尝试一下,然后手动截断数据库表cf_extbase _ *
之后请报告错误是否仍然存在。