【发布时间】:2015-07-14 08:30:38
【问题描述】:
我在使用多步表单时遇到了一些问题,因为对包含只有单选按钮的表单的单个步骤的验证不起作用:(
我有一个简单的属性 type 代表一个单选按钮值:
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');
}
如果我添加一个示例第二个属性 name 类型的字符串,带有 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 对象为空。
我不知道这个奇怪问题的原因,希望你能帮助我吗?
【问题讨论】:
-
没有人能重现这个问题吗?
标签: validation typo3 fluid extbase typo3-6.2.x