Среда: 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 содержит только текст «ОК».
Проблема в следующем: каждый раз, когда я добавляю аннотацию @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;
}
Не имеет значения, есть ли оператор возврата ...
Я просмотрел Tx_Extbase_MVC_Controller_ActionController -> callActionMethod () и весь процесс проверки (через var_dump, debug_backtrace и т. Д.), Чтобы выяснить, почему возникает эта ошибка и почему нет вывода из сообщений об ошибках. Это все очень странно ... так что, может быть, у кого-то тут есть чаевые :-)
Та же ошибка возникает, если я добавляю тег @validation в модель моего класса feUser, например @validate notEmpty
Конфигурация Extbase через typoscript
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: Конечно, я много гуглил, прежде чем спрашивать здесь.