2016-10-19 3 views
1

Я хочу, чтобы подтвердить свою дату с Symfony\Component\Validator\Constraints и УчениемУтверждайте LessThanOrEqual и Утверждай Range не работают с DATETIME

в моем контроллере у меня есть

$user->setMyDate(new \DateTime('tomorrow')); 

и в моей сущности

/** 
* @var \DateTime 
* @Assert\NotBlank() 
* @Assert\LessThanOrEqual("today") 
* @Assert\Range(
*  min = "now", 
*  max = "now" 
*) 
* @Assert\DateTime() 
* @ORM\Column(name="my_date", type="datetime", precision=0, scale=0, nullable=false, unique=false) 
*/ 
private $my_date; 

Я пробовал с LessThanOrEqual и с диапазоном, но он не работает

+0

Вы называете валидатор где-нибудь? – qooplmao

+0

Что значит где-нибудь? Если я изменю $ user-> setMyDate ('foo'); У меня ошибка, это не Datetime. ** ОБНОВЛЕНИЕ ** Извините, теперь понимаю, да, я называю это – monkeyUser

ответ

0

Is это вопрос или это заявление? Нет, они этого не делают.

Когда инициализируется какое-либо ограничение, оно получает значения для сравнения с переданными параметрами. В вашем случае - это строки «сегодня» или «сейчас».

Поэтому, когда применяется ограничение, строка сравнивается с объектом \ DataTime и, очевидно, она не работает.

Но для того, чтобы получить то, что вам нужно, вам просто нужно создать собственное ограничение.

Что-то вроде этого:

class RageDateTime extends Range 
{ 
    public $min; 
    public $max; 

    public function __construct($options = null) 
    { 
     parent::__construct($options); 
     $this->max = new \DateTime($this->max); 
     $this->min = new \DateTime($this->min); 
    } 

    public function validatedBy() 
    { 
     return 'RangeValidator'; 
    }   
} 
+0

спасибо за ваш ответ, но в документации http://symfony.com/doc/current/reference/constraints/LessThanOrEqual.html#comparing-dates это другое – monkeyUser