2015-08-14 2 views
0

Я хочу создать родительский объект в форме представления жидкости с несколькими дочерними объектами в StorageObject (соотношение 1: n). FormData будет передан в базу данных, а в случае ошибки вернет его возвращающий модуль NEW Property Mapper. Но только в поле формы родительского объекта появляется класс «f3-form-error». Но ничего не происходит на непоследовательных дочерних объектах.Создание и проверка родительских/дочерних объектов с Typo3 Extbase Fluid

(Работа в TYPO3 6.2.5)

Как вы можете видеть в коротком примере ниже, Propertymapping для ChildObjects Авторы не получает данное UID. Вместо этого Mapper предоставляет пользовательский идентификатор. Я думаю, что это причина, по которой ValidationResult не возвращается в поле ввода.

Пожалуйста, помогите!

Краткое Пример:

// Контроллер

public function initializeCreateAction() { 
      $this->arguments->getArgument('newSubmission')->getPropertyMappingConfiguration()->allowProperties('authors'); 
      $this->arguments->getArgument('newSubmission')->getPropertyMappingConfiguration()->allowCreationForSubProperty('authors.*'); 
      $this->arguments->getArgument('newSubmission')->getPropertyMappingConfiguration()->forProperty('authors.*')->allowProperties('firstname'); 

     } 

// Жидкость

<f:form.textfield property="type" /><br /> 
    <f:for each="{authors}" as="author" key="uid" iteration="iterator"> 
    <f:form.textfield property="authors.{uid}.firstname" placeholder="Enter your first given name" /> 
</f:for> 

// отладки

$result = $this->getControllerContext()->getRequest()->getOriginalRequestMappingResults(); 

// Выходные данные

array(19 items) 
    newSubmission.type => array(1 item) 
     0 => TYPO3\CMS\Extbase\Validation\Errorprototypeobject 
     message => 'The given subject was NULL.' (27 chars) 
     code => 1221560910 (integer) 
     arguments => array(empty) 
     title => '' (0 chars) 
    newSubmission.authors.000000006200d7b200007f3972b36107.email => array(1 item) 
     0 => TYPO3\CMS\Extbase\Validation\Errorprototypeobject 
     message => 'The given subject was not a valid email address.' (48 chars) 
     code => 1221559976 (integer) 
     arguments => array(empty) 
     title => '' (0 chars) 
    newSubmission.authors.000000006200d7b400007f3972b36107.email => array(1 item) 
     0 => TYPO3\CMS\Extbase\Validation\Errorprototypeobject 
     message => 'The given subject was not a valid email address.' (48 chars) 
     code => 1221559976 (integer) 
     arguments => array(empty) 
     title => '' (0 chars) 
    newSubmission.authors.000000006200d7b700007f3972b36107.email => array(1 item) 
     0 => TYPO3\CMS\Extbase\Validation\Errorprototypeobject 
     message => 'The given subject was not a valid email address.' (48 chars) 
     code => 1221559976 (integer) 
     arguments => array(empty) 
     title => '' (0 chars) 

ответ

0

После нескольких дней напряженной работы я наконец нашел решение DIRTY. Я написал собственный errorAction и перезаписал значения. Должно быть лучшее решение !!!! Вот мой код:

protected function errorAction() { 


     //\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($this->arguments->getValidationResults()->forProperty('newSubmission.authors')); 
     $authorErrors = $this->arguments->getValidationResults()->forProperty('newSubmission.authors')->getSubResults(); 

     $i = 1; 
     foreach ($authorErrors as $uid => $author) { 
      foreach ($author->getSubResults() as $property => $error) { 
       $this->arguments->getValidationResults()->forProperty('newSubmission.authors.'.$i.'.'.$property)->addError(new \TYPO3\CMS\Extbase\Error\Error('Error', time())); 
      } 
      $i++; 
     } 

}