【问题标题】:TYPO3 form validation not working if only radio buttons are used如果仅使用单选按钮,则 TYPO3 表单验证不起作用
【发布时间】: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


【解决方案1】:

解决方案是在具有相同属性名称的单选按钮上方隐藏输入字段:

    <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>

首先要检查和验证隐藏字段,如果选中单选按钮,则类型属性将被覆盖

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2020-04-12
    • 2017-07-21
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多