Условно валидиране на атрибути в 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
AFAIK това работи, ако валидирате запис от асоциация, но ако например просто искате да потвърдите низово поле, получавате стойността на низа като аргумент за isValid и нямате шанс да получите моделния запис от там. - person pdu; 26.02.2013