我将此配置用于表单日期窗口小部件:
$builder->add('birthdate', DateType::class, array(
'widget' => 'single_text',
'html5' => false,
'format' => $dateFormat,
'attr' => array(
'data-mask' => $this->i18n->getDataMaskFromDateFormat($dateFormat)
),
'label' => $dateFormat
));
但是,1234-05-06之类的日期是有效的。有没有办法指定年份范围的验证,以便只有特定范围之间的日期才有效?
最佳基督徒
路径FooBundle \ Resources \ config \ validation \ Foo \ Bar.yml
FooBundle\Model\Foo\Bar\Bar:
constraints:
- Propel\PropelBundle\Validator\Constraints\UniqueObject:
fields: email
message: messages.email_exists
properties:
name:
- NotNull:
message : messages.null
email:
- NotNull:
message : messages.null
- Email:
message : messages.invalid_email
plainPassword:
- NotBlank:
message : messages.null
birthdate:
- NotBlank:
message : messages.null
- Date:
message: messages.invalid_date
- GreaterThan: -100 years
正确加载文件,因为其他约束正在成功验证模型。唯一的问题是,GreaterThan不起作用。
我认为,它不起作用,因为symfony正在检查值是\ DateTime的一个实例,这对于#34; 1987这样的字符串是错误的(但我不太确定) -09-01&#34 ;.但也许我错了。
答案 0 :(得分:0)
所以你可以使用Validator Constraint(http://symfony.com/blog/new-in-symfony-2-6-date-support-for-validator-constraints):
<!-- src/AppBundle/Resources/config/validation.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<class name="AppBundle\Entity\YourEntity">
<property name="date">
<constraint name="GreaterThanOrEqual">-100 years</constraint>
</property>
</class>
</constraint-mapping>
XML:
# src/AppBundle/Resources/config/validation.yml
AppBundle\Entity\YourEntity:
properties:
date:
- GreaterThanOrEqual: -100 years
YML:
$select = db_select('{emp}', 'e');
$select -> addField('e', 'name', 'name');
$select -> addField('e', 'date', 'date');
$select -> condition('e.name', $name);
$select->where('date >= DATE_SUB(NOW(), INTERVAL 1 HOUR)');
$select -> orderBy('e.date', 'DESC')->range(0,1);
$subresult = $select -> execute()-> fetchObject();
答案 1 :(得分:0)
我最终建立了自己的验证器:
public function validate($value, Constraint $constraint)
{
$date = new \DateTime($value);
$today = new \DateTime('today');
$past = new \DateTime('-100 years');
if ($date < $past || $date > $today) {
$this->context->buildViolation($constraint->message)->addViolation();
}
}