我需要在同一模型中根据其他字段的值来验证某些字段。由于自定义验证器只能访问它正在验证的值,因此我无法在那里检查其他验证。通过检查AbstractValidator
,我找不到到达该对象的可能性,该对象的当前值已得到验证。
是否有解决方案来验证/添加控制器中的错误,设置错误并通过保留原始例程而不是向视图引入和分配新对象来呈现实际视图?基本上我可以创建一个自定义$errors
变量,在完成自定义验证后用错误填充它,并将它与原始表单错误一起显示。但我不喜欢这种解决方法。
添加新模型验证器时,您可以访问该模型的其他字段
文件:test_extension/Classes/Domain/Validator/TestModelValidator.php:
class Tx_TestExtension_Domain_Validator_TestModelValidator extends Tx_Extbase_Validation_Validator_AbstractValidator {
/**
* @param Tx_TestExtension_Domain_Model_TestModel $testModel
* @return boolean
*/
public function isValid($testModel) {
/** @var $testModel Tx_TestExtension_Domain_Model_TestModel */
//Access all properties from $testModel
$field1 = $testModel->getMyField1();
$field2 = $testModel->getMyField2();
}
}
您还可以将错误添加到特定字段,但此代码来自 TYPO3 4.5,不知道它是否仍然有效:
$error = t3lib_div::makeInstance('Tx_Extbase_Validation_Error', 'The entered value is allready in use.', 1329936079);
$this->errors['field2'] = t3lib_div::makeInstance('Tx_Extbase_Validation_PropertyError', 'field2');
$this->errors['field2']->addErrors(array($error));