我想停止自动转换不存在的日子。
FormType
$builder
->add("start", new DateTimeType(), [
"date_widget" => "single_text",
"minutes" => [0, 20, 40],
"required" => true,
])
;
验证
//...
start:
- DateTime: ~
- NotBlank: ~
在这种情况下,它会自动转换价值 “2017-03-33”的价值被转换为“2017-04-02”值 它通过了表单验证检查。
如果表单(日期)的输入值不存在,我想发出错误。
谢谢你,如果你知道的话。
答案 0 :(得分:0)
此行为是由DateTimeType类引起的。它使用DateTime :: createFromFormat方法进行输入值转换,自动将值修正为有效值。
可以在本文https://derickrethans.nl/obtaining-the-next-month-in-php.html
中找到更多内容如果转换后的值有效或无效,可以通过DateTime :: getLastErrors()方法计算出来,那么所需行为的解决方案就是自定义DateTimeType类。
快速未经测试的例子:
class CustomDateTimeType extends Type
{
...
...
public function convertToPHPValue($value, AbstractPlatform $platform)
{
if ($value === null || $value instanceof \DateTime) {
return $value;
}
$val = \DateTime::createFromFormat($platform->getDateTimeFormatString(), $value);
if( \DateTime::getLastErrors()['warning_count'] > 0 ) {
throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getDateTimeFormatString());
}
...
...