環境: 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 には、次の 2 つのアクションが含まれています。
/** * @param $feUser * @return void * @dontvalidate $feUser */ public function registerAction(Tx_Foo_Domain_Model_FeUser $feUser = NULL )
と
/** * @param Tx_Foo_Domain_Model_FeUser $feUser * @param 文字列 $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
整数は、エラーを引き起こすために使用されます。
カスタムバリデーターは、@validation タグを追加する必要がない Tx_Foo_Domain_Validator_FeUserValidator のようなものです。
カスタムバリデータ:
/**
* 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 などを介して) を調べて、このエラーが発生する理由と、エラー メッセージからの出力がない理由を突き止めました。それはすべて非常に奇妙です...だから、誰かがここにヒントを持っているかもしれません:-)
@validate notEmpty のような feUser クラスのモデルに @validation タグを追加すると、同じエラーが発生します
タイポスクリプトによる 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: 確かに、ここで質問する前に、よくググってみました。