2017-01-27 9 views
0

У меня проблема с проверкой объекта TYPO3, которую я не смог решить. Для простоты предположим, что у меня есть объекты A и B с отношением A < - 1: n -> B.Почему мой объект Extbase проверяется только на создание, но не на обновление

Объект A имеет некоторые свойства, которые помечены как @validate NotEmpty в модели A, и это работает отлично, если Я создаю новый экземпляр A, используя форму (генерируется ошибка проверки и поле получает добавленный класс ошибок css).

Если объект уже существует, и я его изменяю (используя стандартную конструкцию редактирования/обновления), то проверка, по-видимому, полностью игнорируется, и я могу сохранить объект с пустым значением для свойства, которое помечено как @validate NotEmpty.

У меня есть подозрение, что поведение может быть связано с другими отношениями в объектах A и B (у B есть ссылка на его родительский пример, например), потому что кажется, что во время проверки все дочерние объекты также проверяются, хотя Я аннотировал все свойства отношений с помощью @ignorevalidation.

Есть ли что-нибудь, что я могу сделать для отладки этого поведения? Есть ли способ предотвратить использование Extbase для проверки дочерних объектов или любых объектов, связанных через свойства отношений?

ответ

2

Я знаю эту проблему от TYPO3 6.2, и я думаю, что она все еще присутствует в 7.6+. Я написал немецкую статью об этом поведении, которое может вам помочь. http://blog.teamgeist-medien.de/2016/02/typo3-extbase-validierung-von-unterobjekten-deaktivieren.html

Резюме: В инициализации-Действия вы можете изменить валидаторы и удалить их из определенных атрибутов.

public function initializeCreateAction() { 
    if ($this->arguments->hasArgument('newPosten')) { 
     /** @var \TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator */ 
     $conjunctionValidator = $this->arguments->getArgument('newPosten')->getValidator(); 
     // REMOVES ALL VALIDATORS! MODIFY TO MAKE IT MORE SPECIFIC! 
     foreach ($conjunctionValidator->getValidators() as $validator) { 
      $conjunctionValidator->removeValidator($validator); 
     } 
    } 
} 
+0

Спасибо за ваш ответ Пол. Я действительно нашел вашу статью перед публикацией здесь, и это определенно похоже на то, что я испытываю. Я проверил, какие валидаторы сгенерированы с помощью фрагмента кода, и, фактически, дополнительно к валидаторам я явно аннотировал каждое свойство реляционных данных либо проверено с помощью CollectionValidator, либо ConjunctionValidator. Проблема заключается в том, что я могу удалить все проверки свойств или нет ... так как не существует метода удаления проверки свойств. Я смог полностью удалить объекты Object ConjunctionValidator. – mrwienh

+0

Я также описал это в статье для использования динамической валидации в зависимости от выбора формы. Я знаю, что это кажется уродливым, но вы можете создать новую модель с отношениями к подобъектам без валидаторов и получить ConjunctionValidator этой «прокси» -модели и привязать ее к вашему запросу в инициализации-Acitons. См .: http://blog.teamgeist-medien.de/2015/05/typo3-extbase-dynamische-validierung-von-models-je-nach-formularauswahl.html –