Skip to content

Commit

Permalink
Added information about the new date handling in the comparison const…
Browse files Browse the repository at this point in the history
…raints and Range

Conflicts:
	reference/constraints/GreaterThan.rst
	reference/constraints/GreaterThanOrEqual.rst
	reference/constraints/LessThan.rst
	reference/constraints/LessThanOrEqual.rst
  • Loading branch information
webmozart authored and weaverryan committed Jun 28, 2015
1 parent 2f64d2b commit 1fa69fe
Show file tree
Hide file tree
Showing 5 changed files with 934 additions and 110 deletions.
217 changes: 187 additions & 30 deletions reference/constraints/GreaterThan.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ GreaterThan
.. versionadded:: 2.3
The ``GreaterThan`` constraint was introduced in Symfony 2.3.

Validates that a value is greater than another value, defined in the options.
To force that a value is greater than or equal to another value, see
Validates that a value is greater than another value, defined in the options. To
force that a value is greater than or equal to another value, see
:doc:`/reference/constraints/GreaterThanOrEqual`. To force a value is less
than another value, see :doc:`/reference/constraints/LessThan`.

Expand All @@ -14,7 +14,6 @@ than another value, see :doc:`/reference/constraints/LessThan`.
+----------------+---------------------------------------------------------------------------+
| Options | - `value`_ |
| | - `message`_ |
| | - `payload`_ |
+----------------+---------------------------------------------------------------------------+
| Class | :class:`Symfony\\Component\\Validator\\Constraints\\GreaterThan` |
+----------------+---------------------------------------------------------------------------+
Expand All @@ -24,11 +23,20 @@ than another value, see :doc:`/reference/constraints/LessThan`.
Basic Usage
-----------

If you want to ensure that the ``age`` of a ``Person`` class is greater
than ``18``, you could do the following:
If you want to ensure that the ``age`` of a ``Person`` class is greater than
``18``, you could do the following:

.. configuration-block::

.. code-block:: yaml
# src/SocialBundle/Resources/config/validation.yml
Acme\SocialBundle\Entity\Person:
properties:
age:
- GreaterThan:
value: 18
.. code-block:: php-annotations
// src/Acme/SocialBundle/Entity/Person.php
Expand All @@ -46,31 +54,16 @@ than ``18``, you could do the following:
protected $age;
}
.. code-block:: yaml
# src/Acme/SocialBundle/Resources/config/validation.yml
Acme\SocialBundle\Entity\Person:
properties:
age:
- GreaterThan:
value: 18
.. code-block:: xml
<!-- src/Acme/SocialBundle/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="Acme\SocialBundle\Entity\Person">
<property name="age">
<constraint name="GreaterThan">
<option name="value">18</option>
</constraint>
</property>
</class>
</constraint-mapping>
<class name="Acme\SocialBundle\Entity\Person">
<property name="age">
<constraint name="GreaterThan">
<option name="value">18</option>
</constraint>
</property>
</class>
.. code-block:: php
Expand All @@ -90,6 +83,170 @@ than ``18``, you could do the following:
}
}
Comparing Dates
---------------

This constraint can be used to compare ``DateTime`` objects against any date
string `accepted by the DateTime constructor`_. For example, you could check
that a date must at least be the next day:

.. configuration-block::

.. code-block:: yaml
# src/OrderBundle/Resources/config/validation.yml
Acme\OrderBundle\Entity\Order:
properties:
deliveryDate:
- GreaterThan: today
.. code-block:: php-annotations
// src/Acme/SocialBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
/**
* @Assert\GreaterThan("today")
*/
protected $deliveryDate;
}
.. code-block:: xml
<!-- src/Acme/OrderBundle/Resources/config/validation.xml -->
<class name="Acme\OrderBundle\Entity\Order">
<property name="deliveryDate">
<constraint name="GreaterThan">today</constraint>
</property>
</class>
.. code-block:: php
// src/Acme/OrderBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('today'));
}
}
Be aware that PHP will use the server's configured timezone to interpret these
dates. If you want to fix the timezone, append it to the date string:

.. configuration-block::

.. code-block:: yaml
# src/OrderBundle/Resources/config/validation.yml
Acme\OrderBundle\Entity\Order:
properties:
deliveryDate:
- GreaterThan: today UTC
.. code-block:: php-annotations
// src/Acme/SocialBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
/**
* @Assert\GreaterThan("today UTC")
*/
protected $deliveryDate;
}
.. code-block:: xml
<!-- src/Acme/OrderBundle/Resources/config/validation.xml -->
<class name="Acme\OrderBundle\Entity\Order">
<property name="deliveryDate">
<constraint name="GreaterThan">today UTC</constraint>
</property>
</class>
.. code-block:: php
// src/Acme/OrderBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('today UTC'));
}
}
The ``DateTime`` class also accepts relative dates or times. For example, you
can check that the above delivery date starts at least five hours after the
current time:

.. configuration-block::

.. code-block:: yaml
# src/OrderBundle/Resources/config/validation.yml
Acme\OrderBundle\Entity\Order:
properties:
deliveryDate:
- GreaterThan: +5 hours
.. code-block:: php-annotations
// src/Acme/SocialBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
/**
* @Assert\GreaterThan("+5 hours")
*/
protected $deliveryDate;
}
.. code-block:: xml
<!-- src/Acme/OrderBundle/Resources/config/validation.xml -->
<class name="Acme\OrderBundle\Entity\Order">
<property name="deliveryDate">
<constraint name="GreaterThan">+5 hours</constraint>
</property>
</class>
.. code-block:: php
// src/Acme/OrderBundle/Entity/Order.php
namespace Acme\OrderBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
class Order
{
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('deliveryDate', new Assert\GreaterThan('+5 hours'));
}
}
Options
-------

Expand All @@ -100,7 +257,7 @@ message

**type**: ``string`` **default**: ``This value should be greater than {{ compared_value }}.``

This is the message that will be shown if the value is not greater than
the comparison value.
This is the message that will be shown if the value is not greater than the
comparison value.

.. include:: /reference/constraints/_payload-option.rst.inc
.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php
Loading

0 comments on commit 1fa69fe

Please sign in to comment.