Условная проверка атрибутов в extbase: добавление ошибок вручную

Мне нужно проверить некоторые поля на основе значений других полей в той же модели. Поскольку пользовательский валидатор имеет доступ только к тому значению, которое он проверяет, я не могу проверить там другие проверки. При проверке AbstractValidator я не смог найти возможность добраться до этого объекта, текущее значение проверено.

Есть ли решение для проверки/добавления ошибок в контроллере, установки ошибок и рендеринга фактического представления, сохраняя исходную процедуру вместо того, чтобы вводить и назначать новые объекты представлению? По сути, я мог бы создать пользовательскую переменную $errors, заполнить ее ошибками после выполнения пользовательских проверок и отобразить ее вместе с ошибками исходной формы. Но мне не нравится такой обходной подход.


person pdu    schedule 25.02.2013    source источник
comment
Для тех, кто заинтересован в этом, я также отправил запрос функции, см. forge.typo3.org/issues/45822   -  person pdu    schedule 25.02.2013


Ответы (1)


Когда вы добавляете новый валидатор модели, у вас есть доступ к другим полям этой модели.

Файл: 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));
person Merec    schedule 26.02.2013
comment
Насколько я знаю, это работает, если вы проверяете запись из ассоциации, но если вы, например, просто хотите проверить строковое поле, вы получаете строковое значение в качестве аргумента для isValid, и у вас нет возможности получить оттуда запись модели. - person pdu; 26.02.2013