0
我有收音机和正常输入字段这样一个简单的流体形式:TYPO3单选按钮验证的最佳实践
<f:form action="create" name="data" object="{data}">
<p>Wählen Sie Ihre Schulform aus:</p>
<f:render partial="FormErrors" arguments="{field: 'data.schoolType'}" />
<f:form.radio id="secondary-school" property="schoolType" value="secondary-school" />
<label for="secondary-school">Gymnasium</label>
<f:form.radio id="school" property="schoolType" value="school" />
<label for="school">Oberschule</label>
<label for="name">
<f:translate key="tx_example_domain_model_school.name" />
<span class="required">*</span>
<f:render partial="FormErrors" arguments="{field: 'data.name'}"/>
</label>
<f:form.textfield property="name" />
...
</f:form>
现在我想验证单选按钮,因为两者都是最初未被选中,但我不不知道我用过的方式是否合适。
我正在与像上面所示的示例性的工作,并已创建了下面的类:
class Data extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* schoolType
*
* @var string
* @validate \Example\Example\Domain\Validator\CustomValidator
*/
protected $schoolType;
/**
* name
*
* @var string
* @validate NotEmpty
*/
protected $name;
irrelvant properties, setter, getter and so on ...
}
因此,我已经使用一个自定义的验证来验证单选按钮,其看起来如下:
class CustomValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
protected $acceptsEmptyValues = FALSE;
/**
* Validates the radio buttons
*
* @param mixed $value
* @return bool
*/
public function isValid($value) {
if (!isset($value) || $value === NULL) {
$this->addError('Wählen Sie einen Schultyp aus.', time());
return FALSE;
}
return TRUE;
}
}
它按预期工作,但有没有更简单的方法来获得相同的解决方案?也许使用标准的TYPO3验证器?我为单选按钮使用了一个字符串类型的属性,因为我正在处理这个单选按钮的值并将其存储为字符串。
建议和意见,欢迎:)
那么你为什么不使用NotEmpty验证?您关注什么,自定义错误消息或预选您的单选按钮? –
你是对的,NotEmpty Validator也可以工作,我可以通过使用流体翻译和错误代码来抛出一个自定义错误信息,所以我不需要自定义验证器:) – Fox
是的,你可以,但据我所知只能更改全局NotEmptyValidator的翻译。这仍然是我在Extbase中错过的一个功能,可以在默认的extbase验证器上设置单个错误消息。因此,我仍然喜欢你的解决方案来创建一个自定义验证器。 –