Skip to content

Commit

Permalink
Merge pull request symfony-fr#704 from kiwidg/collection-type
Browse files Browse the repository at this point in the history
Collection type
  • Loading branch information
gregquat committed May 11, 2015
2 parents a473d11 + 823c204 commit a10e732
Show file tree
Hide file tree
Showing 16 changed files with 175 additions and 47 deletions.
16 changes: 10 additions & 6 deletions book/security.rst
Original file line number Diff line number Diff line change
Expand Up @@ -934,9 +934,11 @@ fichier de configuration. En fait, vous avez déjà vu cet exemple dans ce chapi
// ...
'providers' => array(
'default_provider' => array(
'users' => array(
'ryan' => array('password' => 'ryanpass', 'roles' => 'ROLE_USER'),
'admin' => array('password' => 'kitten', 'roles' => 'ROLE_ADMIN'),
'memory' => array(
'users' => array(
'ryan' => array('password' => 'ryanpass', 'roles' => 'ROLE_USER'),
'admin' => array('password' => 'kitten', 'roles' => 'ROLE_ADMIN'),
),
),
),
),
Expand Down Expand Up @@ -1116,9 +1118,11 @@ en utilisant ``sha1``, suivez les instructions suivantes :
// ...
'providers' => array(
'in_memory' => array(
'users' => array(
'ryan' => array('password' => 'bb87a29949f3a1ee0559f8a57357487151281386', 'roles' => 'ROLE_USER'),
'admin' => array('password' => '74913f5cd5f61ec0bcfdb775414c2fb3d161b620', 'roles' => 'ROLE_ADMIN'),
'memory' => array(
'users' => array(
'ryan' => array('password' => 'bb87a29949f3a1ee0559f8a57357487151281386', 'roles' => 'ROLE_USER'),
'admin' => array('password' => '74913f5cd5f61ec0bcfdb775414c2fb3d161b620', 'roles' => 'ROLE_ADMIN'),
),
),
),
),
Expand Down
91 changes: 91 additions & 0 deletions components/dependency_injection/advanced.rst
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,94 @@ pouvez utiliser la directive ``file``.
Notez que Symfony va appeler en interne la fonction PHP require_once, ce
qui veut dire que votre fichier va être inclus seulement une fois par requête.

Décorer des services
--------------------

.. versionadded:: 2.5
La décoration de services a été ajoutée dans Symfony 2.5.

Quand vous redéfinissez une définition existante, l'ancien service est perdu :

.. code-block:: php
$container->register('foo', 'FooService');
// cela va remplacer l'ancienne définition avec la nouvelle
// l'ancienne est perdue
$container->register('foo', 'CustomFooService');
La plupart du temps, c'est exactement le comportement que vous souhaitez. Cependant,
parfois vous souhaitez décorer l'ancien service à la place. Dans ce cas, l'ancien service
devrait être conservé pour être capable de le référencer dans le nouveau. Cette configuration
remplace ``foo`` avec un nouveau, mais garde une référence à l'ancien sous le nom ``bar.inner``:

.. configuration-block::

.. code-block:: yaml
bar:
public: false
class: stdClass
decorates: foo
arguments: ["@bar.inner"]
.. code-block:: xml
<service id="bar" class="stdClass" decorates="foo" public="false">
<argument type="service" id="bar.inner" />
</service>
.. code-block:: php
use Symfony\Component\DependencyInjection\Reference;
$container->register('bar', 'stdClass')
->addArgument(new Reference('bar.inner'))
->setPublic(false)
->setDecoratedService('foo');
Voici ce qui est réalisé ici : la méthode ``setDecoratedService()`` indique au
conteneur que le service ``bar`` devrait remplacer le service ``foo``, en
renommant ``foo`` en ``bar.inner``.
Par convention, l'ancien service ``foo`` va être renommé ``bar.inner``, pour que
vous puissiez l'injecter dans votre nouveau service.

.. note::
L'id de service interne généré est basé sur l'id du service décorateur
(``bar`` dans ce cas), pas sur celui du service décoré (ici ``foo``). C'est
obligatoire pour permettre plusieurs décorateurs sur le même service (il faut
que le nom de service interne généré soit différent).

Dans la plupat des cas, le décorateur devrait être déclaré privée, puisque vous
n'avez pas besoin de le récupérer sous le nom ``bar`` depuis le conteneur. La
visibilité du service décoré ``foo`` (qui est un alias pour ``bar``) correspondra
à la visibilité initiale du service ``foo``.

Vous pouvez changer le nom du service interne si vous le souhaitez :

.. configuration-block::

.. code-block:: yaml
bar:
class: stdClass
public: false
decorates: foo
decoration_inner_name: bar.wooz
arguments: ["@bar.wooz"]
.. code-block:: xml
<service id="bar" class="stdClass" decorates="foo" decoration-inner-name="bar.wooz" public="false">
<argument type="service" id="bar.wooz" />
</service>
.. code-block:: php
use Symfony\Component\DependencyInjection\Reference;
$container->register('bar', 'stdClass')
->addArgument(new Reference('bar.wooz'))
->setPublic(false)
->setDecoratedService('foo', 'bar.wooz');
3 changes: 1 addition & 2 deletions components/dom_crawler.rst
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,7 @@ des fichiers::
// sélectionne une option
$form['registration[birthday][year]']->select(1984);

// sélectionne plusieurs options d'un champ « select » multiple ou
// plusieurs cases « checkbox »
// sélectionne plusieurs options d'un champ « select » multiple
$form['registration[interests]']->select(array('symfony', 'cookies'));

// peut même simuler un « upload » de fichier
Expand Down
6 changes: 3 additions & 3 deletions components/security/authorization.rst
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ dépend lui même de plusieurs voteurs ("voters" en anglais) et rend un verdict
basé sur tous les votes (soit positif, négatif ou neutre) qu'il a reçu. Il reconnait
plusieurs stratégies :

* ``affirmatif`` (par défaut)
* ``affirmative`` (par défaut)
donne accès dès que n'importe quel voteur retourne une réponse affirmative;

* ``consensus``
donne accès s'il y a plus de voteurs donnant accès qu'il y a le refusant;

* ``unanime``
* ``unanimous``
ne donne accès que si aucun des voteurs n'a refusé l'accès;

.. code-block:: php
Expand All @@ -60,7 +60,7 @@ plusieurs stratégies :
// instances de Symfony\Component\Security\Core\Authorization\Voter\VoterInterface
$voters = array(...);
// l'un des suivants : "affirmatif", "consensus", "unanime"
// l'un des suivants : "affirmative", "consensus", "unanimous"
$strategy = ...;
// donne accès ou non, si tous les voteurs s'abstiennent
Expand Down
2 changes: 1 addition & 1 deletion components/security/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ applications web. Il est livré avec des méthodes d'authentification
utilisant HTTP basic ou l'authentification digest, ou encore un formulaire
interactif de login ou via le certificat X.509, mais permet également
d'implémenter vos propres stratégies d'authentification.
De plus, le composant offre la possibilité d'authoriser les utilisateurs
De plus, le composant offre la possibilité d'autoriser les utilisateurs
en se basant sur leurs rôles, et il contient un système avancé d'ACL.


Expand Down
2 changes: 1 addition & 1 deletion cookbook/console/logging.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ le conteneur de services et utilisez le pour logguer::
}

Selon l'environnement dans lequel vous lancez votre commande (et votre paramétrage de logging),
vous devriez voir les entrées logguées dans le fichier ``app/logs/dev.log`` ou `app/logs/prod.log``.
vous devriez voir les entrées logguées dans le fichier ``app/logs/dev.log`` ou ``app/logs/prod.log``.

Activer le logging automatique des Exceptions
---------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion cookbook/console/sending_emails.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Configurer le Request Contexte globalement
Pour configurer le Context Request - qui est utilisé par le générateur d'URL -
vous pouvez redéfinir les paramètres qu'il utilise comme valeur par défaut pour
changer l'host par défaut (localhost) et le scheme (http). Vous devez également
configurer le chemain de base si Symfony ne tourne pas à la racine de votre
configurer le chemin de base si Symfony ne tourne pas à la racine de votre
serveur.

Notez que ceci n'impacte pas les URLs générées via les requêtes web normales,
Expand Down
4 changes: 2 additions & 2 deletions cookbook/form/unit_testing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ ci-dessous vérifie que tous les champs sont correctement spécifiés::

$this->assertEquals($object, $form->getData());

Enfin, vérifiez la création du ``FormView``. Vous devriez véirifier que
Enfin, vérifiez la création du ``FormView``. Vous devriez vérifier que
tous les widgets que vous voulez afficher sont disponible dans la propriété
``children``::

Expand Down Expand Up @@ -265,4 +265,4 @@ et de tester facilement plusieurs jeux de données
Vous pouvez également passer un autre argument, comme un booléen si le
formulaire doit être synchronisé avec le jeu de données ou non etc.

.. _`fournisseur de données`: http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers
.. _`fournisseur de données`: http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers
2 changes: 1 addition & 1 deletion cookbook/testing/simulating_authentication.rst
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ est envoyé avec la requête. L'exemple suivant vous montre comment faire ::
{
$this->logIn();

$this->client->request('GET', '/demo/secured/hello/Fabien');
$crawler = $this->client->request('GET', '/demo/secured/hello/Fabien');

$this->assertTrue($this->client->getResponse()->isSuccessful());
$this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count());
Expand Down
55 changes: 38 additions & 17 deletions cookbook/validation/custom_constraint.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,24 +65,34 @@ La classe validatrice ne requiert qu'une méthode : ``validate``::
public function validate($value, Constraint $constraint)
{
if (!preg_match('/^[a-zA-Za0-9]+$/', $value, $matches)) {
$this->context->addViolation($constraint->message, array('%string%' => $value));
//Si vous utilisez la nouvelle API de validation 2.5
$this->context->buildViolation($constraint->message)
->setParameter('%string%', $value)
->addViolation();
//Si vous utilisez l'ancienne API de validation 2.4
/*
$this->context->addViolation(
$constraint->message,
array('%string%' => $value)
);
*/
}
}
}

.. note::

La méthode ``validate`` ne retourne pas de valeur; à la place, elle ajoute
des violations de contraintes à la propriété ``context`` du validateur grâce
à l'appel à la méthode ``addViolation`` dans le cas d'erreurs de validation.
Par conséquent, une valeur peut être considérée comme validée si aucune
violation de contrainte n'est ajoutée au contexte. Le premier paramètre de l'appel
à ``addViolation`` est le message d'erreur utilisé pour la violation.
La méthode ``validate`` ne retourne pas de valeur; à la place, elle ajoute
des violations de contraintes à la propriété ``context`` du validateur
dans le cas d'erreurs de validation. Par conséquent, une valeur peut
être considérée comme validée si aucune violation de contrainte n'est
ajoutée au contexte. La méthode ``buildViolation`` prend le message
d'erreur en tant qu'argument, et retourne une instance de
:class:`Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface`.
L'appel à la méthode ``addViolation`` va terminer l'ajout de la validation
au contexte.

.. versionadded:: 2.1
La méthode ``isValid`` est dépréciée au profit de ``validate`` dans Symfony 2.1. La
méthode ``setMessage`` est également dépréciée, en faveur de l'appel à la méthode
``addViolation`` du contexte.
.. versionadded:: 2.5
La méthode ``buildViolation`` a été ajoutée à Symfony 2.5.

Utiliser le nouveau validateur
------------------------------
Expand Down Expand Up @@ -223,10 +233,21 @@ Avec ceci, la méthode ``validate()`` du validateur prend un objet comme premier
{
public function validate($protocol, Constraint $constraint)
{
if ($protocol->getFoo() != $protocol->getBar()) {

$this->context->addViolationAt('foo', $constraint->message, array(), null);
}
if ($protocol->getFoo() != $protocol->getBar()) {
//Si vous utilisez la nouvelle API de validation 2.5
$this->context->buildViolation($constraint->message)
->atPath('foo')
->addViolation();

//Si vous utilisez l'ancienne API de validation 2.4
/*
$this->context->addViolationAt(
'foo',
$constraint->message,
array(),
null
);
*/
}
}

Expand Down
2 changes: 1 addition & 1 deletion quick_tour/the_big_picture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ Corrigez les erreurs reportées par la commande vous pouvez ensuite utiliser Sym
.. code-block:: bash
# démarre le serveur web intégré
$ php ./app/console server:run
$ php ./bin/console server:run
Alors, l'URL de votre application sera « http://localhost:8000/app_dev.php ».

Expand Down
4 changes: 2 additions & 2 deletions reference/configuration/security.rst
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ Chaque partie sera expliquée dans la section suivante.
http_digest:
provider: some_key_from_above
form_login:
# Soumet le formulaire de connection ici
# Soumet le formulaire de connexion ici
check_path: /login_check
# l'utilisateur est redirigé ici si il/elle a besoin de se connecter
Expand Down Expand Up @@ -145,7 +145,7 @@ Chaque partie sera expliquée dans la section suivante.
intention: authenticate
csrf_provider: my.csrf_provider.id
# par défautt, le formulaire de connextion *doit* être de type POST et non GET
# par défautt, le formulaire de connexion *doit* être de type POST et non GET
post_only: true
remember_me: false
Expand Down
8 changes: 4 additions & 4 deletions reference/constraints/Isbn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Isbn
.. versionadded:: 2.3
C'est une nouvelle contrainte depuis la version 2.3.

Cette contrtainte valide si un numéro IBSN( International Standard Book Numbers)
Cette contrainte valide si un numéro ISBN( International Standard Book Numbers)
est soit un nombre de type ISBN-10, de type ISBN-13 ou les deux.

+----------------+----------------------------------------------------------------------+
Expand Down Expand Up @@ -117,20 +117,20 @@ isbn10Message
**type**: ``string`` **default**: ``This value is not a valid ISBN-10.``

Le message qui est présenté si l'option `isbn10`_ est à true et que la valeur
n'est pas un IBSN-10.
n'est pas un ISBN-10.

isbn13Message
~~~~~~~~~~~~~

**type**: ``string`` **default**: ``This value is not a valid ISBN-13.``

Le message qui est présenté si l'option `isbn13`_ est à true et que la valeur
n'est pas un IBSN-13.
n'est pas un ISBN-13.

bothIsbnMessage
~~~~~~~~~~~~~~~

**type**: ``string`` **default**: ``This value is neither a valid ISBN-10 nor a valid ISBN-13.``

Le message qui est présenté si les options `isbn10`_ et `isbn13`_ sont à true et que la valeur
n'est ni un IBSN-10, ni un ISBN-13.
n'est ni un ISBN-10, ni un ISBN-13.
4 changes: 2 additions & 2 deletions reference/forms/twig_reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,8 @@ est possible en utilisant la propriété ``vars`` de l'objet :class:`Symfony\\Co
+-----------------+-----------------------------------------------------------------------------------------+
| ``label`` | La chaine de caractère libelée qui sera rendue |
+-----------------+-----------------------------------------------------------------------------------------+
| ``multipart`` | If ``true``, ``form_enctype`` will render ``enctype="multipart/form-data"``. |
| | This only applies to the root form element. |
| ``multipart`` | Si ``true``, ``form_enctype`` affichera ``enctype="multipart/form-data"``. |
| | S'applique uniquement à l'élément racine du formulaire (form). |
+-----------------+-----------------------------------------------------------------------------------------+
| ``attr`` | Un tableau clé-valeur qui sera rendu pour les attributs HTML pour le champ |
+-----------------+-----------------------------------------------------------------------------------------+
Expand Down
13 changes: 13 additions & 0 deletions reference/forms/types/collection.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ est très utile lorsque vous créerez des formulaires avec des relations one-to-
| | - `allow_delete`_ |
| | - `prototype`_ |
| | - `prototype_name`_ |
| | - `delete_empty`_ |
+-------------+-----------------------------------------------------------------------------+
| Options | - `label`_ |
| héritées | - `label_attr`_ |
Expand Down Expand Up @@ -337,6 +338,18 @@ Si vous avez plusieurs collections dans votre formulaire, ou pire encore,
des collections imbriquées, vous voudrez peut être changer le joker (placeholder)
pour que les jokers sous-jacents ne soient pas remplacés par la même valeur.

delete_empty
~~~~~~~~~~~~

.. versionadded:: 2.5
L'option ``delete_empty`` a été introduite avec Symfony 2.5.

**type**: ``Boolean`` **default**: ``false``

Si vous voulez retirer complètement les entrées vides de la collection, vous devez définir cette option à ``true``.
Cependant, les entrées existantes de la collection ne seront supprimées que si l'option allow_delete_ est activée.
Autrement, les entrées vides seront gardées.

Options héritées
----------------

Expand Down
Loading

0 comments on commit a10e732

Please sign in to comment.