dateTimeType:我想停止自动转换:Symfony2

时间:2017-03-13 09:44:08

标签: symfony symfony-forms

我想停止自动转换不存在的日子。

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”值 它通过了表单验证检查。

如果表单(日期)的输入值不存在,我想发出错误。

谢谢你,如果你知道的话。

1 个答案:

答案 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());
        }

        ...
        ...