Skip to content

Commit bf67517

Browse files
committed
Merge branch '2.2' into 2.3
Conflicts: reference/forms/types/options/property_path.rst.inc
2 parents 23a016c + 954a9ef commit bf67517

21 files changed

+260
-94
lines changed

book/controller.rst

+10-14
Original file line numberDiff line numberDiff line change
@@ -687,23 +687,19 @@ the ``notice`` message:
687687

688688
.. code-block:: html+jinja
689689

690-
{% if app.session.started %}
691-
{% for flashMessage in app.session.flashbag.get('notice') %}
692-
<div class="flash-notice">
693-
{{ flashMessage }}
694-
</div>
695-
{% endfor %}
696-
{% endif %}
690+
{% for flashMessage in app.session.flashbag.get('notice') %}
691+
<div class="flash-notice">
692+
{{ flashMessage }}
693+
</div>
694+
{% endfor %}
697695

698696
.. code-block:: html+php
699697

700-
<?php if ($view['session']->isStarted()): ?>
701-
<?php foreach ($view['session']->getFlashBag()->get('notice') as $message): ?>
702-
<div class="flash-notice">
703-
<?php echo "<div class='flash-error'>$message</div>" ?>
704-
</div>
705-
<?php endforeach; ?>
706-
<?php endif; ?>
698+
<?php foreach ($view['session']->getFlashBag()->get('notice') as $message): ?>
699+
<div class="flash-notice">
700+
<?php echo "<div class='flash-error'>$message</div>" ?>
701+
</div>
702+
<?php endforeach; ?>
707703

708704
By design, flash messages are meant to live for exactly one request (they're
709705
"gone in a flash"). They're designed to be used across redirects exactly as

book/doctrine.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1462,7 +1462,7 @@ and ``nullable``. Take a few examples:
14621462
<!--
14631463
A string field length 255 that cannot be null
14641464
(reflecting the default values for the "length" and *nullable* options)
1465-
type attribute is necessary in yaml definitions
1465+
type attribute is necessary in xml definitions
14661466
-->
14671467
<field name="name" type="string" />
14681468
<field name="email"

book/http_cache.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ possible.
975975

976976
.. tip::
977977

978-
The listener listener only responds to local IP addresses or trusted
978+
The listener only responds to local IP addresses or trusted
979979
proxies.
980980

981981
.. note::

book/templating.rst

+1-35
Original file line numberDiff line numberDiff line change
@@ -1381,43 +1381,9 @@ in a JavaScript string, use the ``js`` context:
13811381
Debugging
13821382
---------
13831383

1384-
.. versionadded:: 2.0.9
1385-
This feature is available as of Twig ``1.5.x``, which was first shipped
1386-
with Symfony 2.0.9.
1387-
13881384
When using PHP, you can use ``var_dump()`` if you need to quickly find the
13891385
value of a variable passed. This is useful, for example, inside your controller.
1390-
The same can be achieved when using Twig by using the debug extension. This
1391-
needs to be enabled in the config:
1392-
1393-
.. configuration-block::
1394-
1395-
.. code-block:: yaml
1396-
1397-
# app/config/config.yml
1398-
services:
1399-
acme_hello.twig.extension.debug:
1400-
class: Twig_Extension_Debug
1401-
tags:
1402-
- { name: 'twig.extension' }
1403-
1404-
.. code-block:: xml
1405-
1406-
<!-- app/config/config.xml -->
1407-
<services>
1408-
<service id="acme_hello.twig.extension.debug" class="Twig_Extension_Debug">
1409-
<tag name="twig.extension" />
1410-
</service>
1411-
</services>
1412-
1413-
.. code-block:: php
1414-
1415-
// app/config/config.php
1416-
use Symfony\Component\DependencyInjection\Definition;
1417-
1418-
$definition = new Definition('Twig_Extension_Debug');
1419-
$definition->addTag('twig.extension');
1420-
$container->setDefinition('acme_hello.twig.extension.debug', $definition);
1386+
The same can be achieved when using Twig thanks to the the debug extension.
14211387

14221388
Template parameters can then be dumped using the ``dump`` function:
14231389

book/validation.rst

+128
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,9 @@ With this configuration, there are two validation groups:
779779

780780
* ``Default`` - contains the constraints not assigned to any other group;
781781

782+
* ``User`` - contains the constraints that belongs to group ``Default``
783+
(this group is useful for :ref:`book-validation-group-sequence`);
784+
782785
* ``registration`` - contains the constraints on the ``email`` and ``password``
783786
fields only.
784787

@@ -787,13 +790,138 @@ as the second argument to the ``validate()`` method::
787790

788791
$errors = $validator->validate($author, array('registration'));
789792

793+
If no groups are specified, all constraints that belong in group ``Default``
794+
will be applied.
795+
790796
Of course, you'll usually work with validation indirectly through the form
791797
library. For information on how to use validation groups inside forms, see
792798
:ref:`book-forms-validation-groups`.
793799

794800
.. index::
795801
single: Validation; Validating raw values
796802

803+
.. _book-validation-group-sequence:
804+
805+
Group Sequence
806+
--------------
807+
808+
In some cases, you want to validate your groups by steps. To do this, you can
809+
use the ``GroupSequence`` feature. In the case, an object defines a group sequence,
810+
and then the groups in the group sequence are validated in order.
811+
812+
.. tip::
813+
814+
Group sequences cannot contain the group ``Default``, as this would create
815+
a loop. Instead, use the group ``{ClassName}`` (e.g. ``User``) instead.
816+
817+
For example, suppose you have a ``User`` class and want to validate that the
818+
username and the password are different only if all other validation passes
819+
(in order to avoid multiple error messages).
820+
821+
.. configuration-block::
822+
823+
.. code-block:: yaml
824+
825+
# src/Acme/BlogBundle/Resources/config/validation.yml
826+
Acme\BlogBundle\Entity\User:
827+
group_sequence:
828+
- User
829+
- Strict
830+
getters:
831+
passwordLegal:
832+
- "True":
833+
message: "The password cannot match your username"
834+
groups: [Strict]
835+
properties:
836+
username:
837+
- NotBlank: ~
838+
password:
839+
- NotBlank: ~
840+
841+
.. code-block:: php-annotations
842+
843+
// src/Acme/BlogBundle/Entity/User.php
844+
namespace Acme\BlogBundle\Entity;
845+
846+
use Symfony\Component\Security\Core\User\UserInterface;
847+
use Symfony\Component\Validator\Constraints as Assert;
848+
849+
/**
850+
* @Assert\GroupSequence({"Strict", "User"})
851+
*/
852+
class User implements UserInterface
853+
{
854+
/**
855+
* @Assert\NotBlank
856+
*/
857+
private $username;
858+
859+
/**
860+
* @Assert\NotBlank
861+
*/
862+
private $password;
863+
864+
/**
865+
* @Assert\True(message="The password cannot match your username", groups={"Strict"})
866+
*/
867+
public function isPasswordLegal()
868+
{
869+
return ($this->username !== $this->password);
870+
}
871+
}
872+
873+
.. code-block:: xml
874+
875+
<!-- src/Acme/BlogBundle/Resources/config/validation.xml -->
876+
<class name="Acme\BlogBundle\Entity\User">
877+
<property name="username">
878+
<constraint name="NotBlank" />
879+
</property>
880+
<property name="password">
881+
<constraint name="NotBlank" />
882+
</property>
883+
<getter property="passwordLegal">
884+
<constraint name="True">
885+
<option name="message">The password cannot match your username</option>
886+
<option name="groups">
887+
<value>Strict</value>
888+
</option>
889+
</constraint>
890+
</getter>
891+
<group-sequence>
892+
<value>User</value>
893+
<value>Strict</value>
894+
</group-sequence>
895+
</class>
896+
897+
.. code-block:: php
898+
899+
// src/Acme/BlogBundle/Entity/User.php
900+
namespace Acme\BlogBundle\Entity;
901+
902+
use Symfony\Component\Validator\Mapping\ClassMetadata;
903+
use Symfony\Component\Validator\Constraints as Assert;
904+
905+
class User
906+
{
907+
public static function loadValidatorMetadata(ClassMetadata $metadata)
908+
{
909+
$metadata->addPropertyConstraint('username', new Assert\NotBlank());
910+
$metadata->addPropertyConstraint('password', new Assert\NotBlank());
911+
912+
$metadata->addGetterConstraint('passwordLegal', new Assert\True(array(
913+
'message' => 'The password cannot match your first name',
914+
'groups' => array('Strict'),
915+
)));
916+
917+
$metadata->setGroupSequence(array('User', 'Strict'));
918+
}
919+
}
920+
921+
In this example, it will first validate all constraints in the group ``User``
922+
(which is the same as the ``Default`` group). Only if all constraints in
923+
that group are valid, the second group, ``Strict``, will be validated.
924+
797925
.. _book-validation-raw-values:
798926

799927
Validating Values and Arrays

components/config/definition.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ and sometimes only:
443443
444444
By default ``connection`` would be an array in the first case and a string
445445
in the second making it difficult to validate. You can ensure it is always
446-
an array with with ``fixXmlConfig``.
446+
an array with ``fixXmlConfig``.
447447

448448
You can further control the normalization process if you need to. For example,
449449
you may want to allow a string to be set and used as a particular key or several

components/event_dispatcher/container_aware_dispatcher.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Adding Subscriber Services
5656
``EventSubscribers`` can be added using the
5757
:method:`Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher::addSubscriberService`
5858
method where the first argument is the service ID of the subscriber service,
59-
and the second argument is the the service's class name (which must implement
59+
and the second argument is the service's class name (which must implement
6060
:class:`Symfony\\Component\\EventDispatcher\\EventSubscriberInterface`) as follows::
6161

6262
$dispatcher->addSubscriberService(

components/http_foundation/session_configuration.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ examples if you wish to write your own.
7979
Example usage::
8080

8181
use Symfony\Component\HttpFoundation\Session\Session;
82-
use Symfony\Component\HttpFoundation\Session\Storage\SessionStorage;
82+
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
8383
use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
8484

8585
$storage = new NativeSessionStorage(array(), new PdoSessionHandler());

components/http_foundation/sessions.rst

-13
Original file line numberDiff line numberDiff line change
@@ -329,16 +329,3 @@ Compact method to process display all flashes at once::
329329
echo "<div class='flash-$type'>$message</div>\n";
330330
}
331331
}
332-
333-
.. caution::
334-
335-
As flash messages use a session to store the messages from one request to
336-
the next one, a session will be automatically started when you read the
337-
flash messages even if none already exists. To avoid that default
338-
behavior, test if there is an existing session first::
339-
340-
if ($session->isStarted()) {
341-
foreach ($session->getFlashBag()->get('warning', array()) as $message) {
342-
echo "<div class='flash-warning'>$message</div>";
343-
}
344-
}

contributing/code/patches.rst

+5-5
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ Set up your user information with your real name and a working email address:
3434

3535
.. tip::
3636

37-
If your IDE creates configuration files inside project's directory,
37+
If your IDE creates configuration files inside the project's directory,
3838
you can use global ``.gitignore`` file (for all projects) or
3939
``.git/info/exclude`` file (per project) to ignore them. See
4040
`Github's documentation`_.
4141

4242
.. tip::
4343

4444
Windows users: when installing Git, the installer will ask what to do with
45-
line endings and suggests to replace all Lf by CRLF. This is the wrong
45+
line endings, and suggests replacing all LF with CRLF. This is the wrong
4646
setting if you wish to contribute to Symfony! Selecting the as-is method is
4747
your best choice, as git will convert your line feeds to the ones in the
4848
repository. If you have already installed Git, you can check the value of
@@ -52,8 +52,8 @@ Set up your user information with your real name and a working email address:
5252
5353
$ git config core.autocrlf
5454
55-
This will return either "false", "input" or "true", "true" and "false" being
56-
the wrong values. Set it to another value by typing:
55+
This will return either "false", "input" or "true"; "true" and "false" being
56+
the wrong values. Change it to "input" by typing:
5757

5858
.. code-block:: bash
5959
@@ -344,7 +344,7 @@ because you want early feedback on your work, add an item to todo-list:
344344
.. code-block:: text
345345
346346
- [ ] finish the code
347-
- [ ] gather feedback my changes
347+
- [ ] gather feedback for my changes
348348
349349
As long as you have items in the todo-list, please prefix the pull request
350350
title with "[WIP]".

contributing/code/standards.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ example containing most features described below:
4949
5050
/**
5151
* @param string $dummy Some argument description
52-
* @param array $options
52+
* @param array $options
5353
*
5454
* @return string|null Transformed input
5555
*/
56-
private function transformText($dummy, $options = array())
56+
private function transformText($dummy, array $options = array())
5757
{
5858
$mergedOptions = array_merge(
5959
$options,

0 commit comments

Comments
 (0)