環境:Mac OS X的獅子,PHP 5.3.10中,MySQL 5.X,TYPO3 4.7.1,4.7.1 Extbase,流體4.7.0TYPO3 Extbase控制器/模型驗證失敗
我一直在爲struggeling幾天後在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」文本。
的問題是:我每次添加一個@Validate註釋到createAction()方法,我會得到這個錯誤: 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;
}
,如果有一個return語句沒關係......
我在Tx_Extbase_MVC_Controller_ActionController擡頭 - > callActionMethod()和整個驗證過程(通過var_dump和debug_backtrace等)來找出這個錯誤發生的原因,以及錯誤信息沒有輸出的原因。這一切都非常奇怪...所以也許有人在這裏一個TIPP :-)
,如果我在feUser類的模型添加一個@validation標籤像 @Validate notEmpty
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:當然,在我問這裏之前,我搜索了很多東西。
只是一個想法,我在一家德國TYPO3論壇拾起某處。按照註釋順序亂序排列 - 並在更改後清除臨時文件和緩存。 –
嘗試了一切,但沒有。我將在下週末進行進一步的調查。 – kiri