2015-07-14 2 views
0

У меня есть некоторые проблемы с многоступенчатой ​​формой, потому что проверка на один шаг, который содержит форму только с радио-кнопкой не работает :(TYPO3 форма проверка не работает, если только селективные кнопки используются

У меня есть простой свойство типа, которые представляют собой значение кнопки радио:

class Step1Data extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { 

/** 
* type 
* 
* @var string 
* @validate NotEmpty 
*/ 
protected $type; 

/** 
* Returns the type 
* 
* @return string $type 
*/ 
public function getType() { 
    return $this->type; 
} 

/** 
* Sets the type 
* 
* @param string $type 
* @return void 
*/ 
public function setType($type) { 
    $this->type = $type; 
} 

} 

жидкость разметки выглядит следующим образом для этого шага:

<f:layout name="Default" /> 
<f:section name="main"> 
    <f:form action="step1redirect" class="step1" name="step1data" object="{step1data}"> 
     <f:render partial="FormErrors" arguments="{field: 'step1data.type'}" /> 
     <label> 
      <f:form.radio property="type" value="type-1" /> 
      type 1 
     </label> 
     <label> 
      <f:form.radio property="type" value="type-2" /> 
      type 2 
     </label> 
     <f:form.submit value="next" />   
    </f:form> 
</f:section> 

действия контроллера для этого шага является:

/** 
* Step1 
* 
* @param \Fox\Example\Domain\Model\Step1Data $step1data 
* @ignorevalidation $step1data 
*/ 
public function step1Action(\Fox\Example\Domain\Model\Step1Data $step1data = NULL) { 

    if ($GLOBALS['TSFE']->fe_user->getKey('ses', 'step1data') && $step1data == NULL) { 
     $step1data = unserialize($GLOBALS['TSFE']->fe_user->getKey('ses', 'step1data')); 
    } 

    $this->view->assign('step1data', $step1data); 

} 

/** 
* Step1 redirect action 
* 
* @param \Fox\Example\Domain\Model\Step1Data $step1data 
*/ 
public function step1redirectAction(\Fox\Example\Domain\Model\Step1Data $step1data) { 

    $GLOBALS['TSFE']->fe_user->setKey('ses', 'step1data', serialize($step1data)); 
    $GLOBALS['TSFE']->fe_user->storeSessionData(); 

    $this->redirect('step2'); 

} 

Если добавить пример второго свойства имени типа строки с NotEmpty аннотацией и текстовое поле для текучей среды к этой форме, как:

<f:layout name="Default" /> 
<f:section name="main"> 
    <f:form action="step1redirect" class="step1" name="step1data" object="{step1data}"> 
     <f:render partial="FormErrors" arguments="{field: 'step1data.type'}" /> 
     <label> 
      <f:form.radio property="type" value="type-1" /> 
      type 1 
     </label> 
     <label> 
      <f:form.radio property="type" value="type-2" /> 
      type 2 
     </label> 

     <!-- EXAMPLE second property --> 
     <f:render partial="FormErrors" arguments="{field: 'step1data.name'}"/> 
     <f:form.textfield property="name" /> 
     <!-- EXAMPLE second property --> 

     <f:form.submit value="next" />   
    </f:form> 
</f:section> 

в валидация работает. Проверка также работает, если у меня есть только текстовое поле в этой форме, но если у меня есть только переключатели без текстового поля в этой форме, проверка не работает и появляется ошибка, потому что объект step1data имеет значение NULL.

Я не знаю причину этой странной проблемы, надеюсь, вы можете мне помочь?

+0

не может воспроизвести эту проблему? – Fox

ответ

0

решение является скрытым поле ввода выше радиокнопок с одинаковым именем свойства:

<f:form.hidden property="type" /> 
    <div class="group-block"> 
     <label> 
      <f:form.radio property="type" value="wish1" /> 
      type1 
     </label> 
    </div> 
    <div class="group-block"> 
     <label> 
      <f:form.radio property="type" value="wish2" /> 
      type2 
     </label> 
    </div> 

так во-первых, скрытое поле будет проверено и подтверждено, и если переключатель установлен, то свойство типа будет быть перезаписан