2017-03-13 3 views
0

存在しない日の自動変換を停止したい。この場合dateTimeType:自動変換を停止したい:Symfony2

に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

この現象は、DateTimeTypeクラスによって発生します。これはDateTime :: createFromFormatメソッドを使用して、値を有効な値に自動修正する入力値の変換に使用します。変換された値が有効か無効だった場合

詳細は日時:: getLastErrors()メソッドで考え出したので、ご希望の行動のためのソリューションは、カスタムDateTimeTypeクラスにあることができ、この記事https://derickrethans.nl/obtaining-the-next-month-in-php.html

年に設立することができます。

クイックテストされていない例:

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

     ... 
     ... 
関連する問題