-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
[WCM] Added information about the new date handling in the comparison constraints and Range #4143
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -83,6 +83,170 @@ If you want to ensure that the ``age`` of a ``Person`` class is greater than | |
} | ||
} | ||
|
||
Comparing Dates | ||
--------------- | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you need to add a |
||
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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. missing Acme (also in the YAML code blocks below) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it should use AppBundle now |
||
Acme\OrderBundle\Entity\Order: | ||
properties: | ||
deliveryDate: | ||
- GreaterThan: today | ||
|
||
.. code-block:: php-annotations | ||
|
||
// src/Acme/SocialBundle/Entity/Order.php | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OrderBundle There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems to be wrong in all annotation code blocks. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. shouldn't we use AcmeDemoBundle like everywhere in the doc ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We already use different examples in the constraint reference (e.g. AcmeBlogBundle, AcmeEventBundle, and so on). So, I think that's okay here. |
||
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> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I prefer to have fully working XML examples: <!-- src/Acme/OrderBundle/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\OrderBundle\Entity\Order">
<property name="deliveryDate">
<constraint name="GreaterThan">today</constraint>
</property>
</class>
</constraint-mapping> This also applies to the other XML code blocks below. |
||
|
||
.. 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: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have a minor question regarding this phrase:
Does
What I mean is that the server timezone isn't broken, it's just different from what we may need. |
||
|
||
.. 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 | ||
------- | ||
|
||
|
@@ -95,3 +259,5 @@ message | |
|
||
This is the message that will be shown if the value is not greater than the | ||
comparison value. | ||
|
||
.. _`accepted by the DateTime constructor`: http://www.php.net/manual/en/datetime.formats.php |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't it useful to explain how to compare
Date
instances here too?