Commit 8fc14a8a by Kevin LEVRON

Update intro-upgrade-from-v1.md

parent d706225a
Mise à jour depuis la version 1.1 Mise à jour depuis la version 1.1
================================= =================================
Il y a beaucoup de différences entre les versions 1.1 et 2.0 de Yii, le framework ayant été complètement réécrit pour la 2.0. Il y a beaucoup de différences entre les versions 1.1 et 2.0 de Yii, le framework ayant été complètement réécrit pour
En conséquence, la mise à jour depuis la version 1.1 n'est pas aussi triviale que la mise à jour entre deux versions mineures. Dans ce guide, vous la 2.0. En conséquence, la mise à jour depuis la version 1.1 n'est pas aussi triviale que la mise à jour entre deux
trouverez les principales différences entre les deux versions. versions mineures. Dans ce guide, vous trouverez les principales différences entre les deux versions.
Si vous n'avez pas utilisé Yii 1.1 avant, vous pouvez ignorer cette section et passer directement à la partie "[Mise en route] (start-installation.md)". Si vous n'avez pas utilisé Yii 1.1 avant, vous pouvez ignorer cette section et passer directement à la partie
"[Mise en route] (start-installation.md)".
Merci de noter que Yii 2.0 introduit plus de nouvelles fonctionnalités que celles abordées ici. Il est fortement recommandé Merci de noter que Yii 2.0 introduit plus de nouvelles fonctionnalités que celles abordées ici. Il est fortement
de lire tout le guide de référence pour en apprendre davantage. Il y a des chances que recommandé de lire tout le guide de référence pour en apprendre davantage. Il y a des chances que certaines
certaines fonctionnalités, que vous aviez préalablement développées pour vous, fassent désormais partie du code du noyau. fonctionnalités, que vous aviez préalablement développées pour vous, fassent désormais partie du code du noyau.
Installation Installation
------------ ------------
Yii 2.0 exploite pleinement [Composer] (https://getcomposer.org/), le gestionnaire de paquet PHP. L'installation Yii 2.0 exploite pleinement [Composer] (https://getcomposer.org/), le gestionnaire de paquet PHP. L'installation
du framework, ainsi que des extensions, sont gérées par Composer. Merci de lire la partie du framework, ainsi que des extensions, sont gérées par Composer. Merci de lire la partie
[Starting from Basic App](start-basic.md) pour apprendre comment installer Yii 2.0. Si vous voulez [Installer Yii](start-installation.md) pour apprendre comment installer Yii 2.0. Si vous voulez
créer de nouvelles extensions, ou rendre vos extensions existantes 1.1 compatibles 2.0, merci de lire créer de nouvelles extensions, ou rendre vos extensions existantes 1.1 compatibles 2.0, merci de lire
la partie [Créer des extensions](extend-creating-extensions.md) de ce guide. la partie [Créer des extensions](extend-creating-extensions.md) de ce guide.
...@@ -27,7 +28,7 @@ Pré-requis PHP ...@@ -27,7 +28,7 @@ Pré-requis PHP
Yii 2.0 requiert PHP 5.4 ou plus, ce qui est une grosse amélioration par rapport à PHP 5.2 qui était requis pour Yii 1.1. Yii 2.0 requiert PHP 5.4 ou plus, ce qui est une grosse amélioration par rapport à PHP 5.2 qui était requis pour Yii 1.1.
Par conséquent, il y a beaucoup de différences au niveau du langage pour lesquelles vous devriez prêter attention. Par conséquent, il y a beaucoup de différences au niveau du langage pour lesquelles vous devriez prêter attention.
Voici un résumé des principaux changements concernant PHP: Voici un résumé des principaux changements concernant PHP:
- [Espaces de noms](http://php.net/manual/fr/language.namespaces.php). - [Espaces de noms](http://php.net/manual/fr/language.namespaces.php).
...@@ -47,22 +48,22 @@ Espaces de Noms ...@@ -47,22 +48,22 @@ Espaces de Noms
Le changement le plus évident dans Yii 2.0 est l'utilisation des espaces de noms. La majorité des classes du noyau Le changement le plus évident dans Yii 2.0 est l'utilisation des espaces de noms. La majorité des classes du noyau
utilise les espace de noms, par exemple, `yii\web\Request`. Le préfixe «C» n'est plus utilisé dans les noms de classe. utilise les espace de noms, par exemple, `yii\web\Request`. Le préfixe «C» n'est plus utilisé dans les noms de classe.
Le schéma de nommage suit maintenant la structure des répertoires. Par exemple, `yii\web\Request` Le schéma de nommage suit maintenant la structure des répertoires. Par exemple, `yii\web\Request`
indique que le fichier de classe correspondant est `web/Request.php` dans le dossier du framework. indique que le fichier de classe correspondant est `web/Request.php` dans le dossier du framework.
(Vous pouvez utiliser n'importe quelle classe du noyau sans inclure explicitement le fichier correspondant, grâce au (Vous pouvez utiliser n'importe quelle classe du noyau sans inclure explicitement le fichier correspondant, grâce au
chargeur de classe de Yii.) chargeur de classe de Yii.)
Composants et objets Composants et objets
-------------------- --------------------
Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\Object]] et [[yii\base\Component]]. Yii 2.0 décompose la classe `CComponent` 1.1 en deux classes: [[yii\base\Object]] et [[yii\base\Component]].
Le classe [[yii\base\Object|Object]] est une classe de base légère qui permet de définir les [Propriétés de l'objet] (concept properties.md) Le classe [[yii\base\Object|Object]] est une classe de base légère qui permet de définir les [Propriétés de l'objet] (concept properties.md)
via des accesseurs. La classe [[yii\base\Component|Component]] est une sous classe de [[yii\base\Object|Object]] et supporte via des accesseurs. La classe [[yii\base\Component|Component]] est une sous classe de [[yii\base\Object|Object]] et supporte
les [Evénements] (concept events.md) et les [Comportements] (concept behaviors.md). les [Evénements] (concept events.md) et les [Comportements] (concept behaviors.md).
Si votre classe n'a pas besoin des événements et des comportements, vous devriez envisager d'utiliser Si votre classe n'a pas besoin des événements et des comportements, vous devriez envisager d'utiliser
[[yii\base\Object|Object]] comme classe de base. C'est généralement le cas pour les classes qui représentent [[yii\base\Object|Object]] comme classe de base. C'est généralement le cas pour les classes qui représentent
une structures de données basique. une structures de données basique.
...@@ -71,7 +72,7 @@ Configuration d'Objet ...@@ -71,7 +72,7 @@ Configuration d'Objet
--------------------- ---------------------
La classe [[yii\base\Object|Object]] introduit une manière uniforme pour configurer les objets. Toute sous classe La classe [[yii\base\Object|Object]] introduit une manière uniforme pour configurer les objets. Toute sous classe
de [[yii\base\Object|Object]] doit déclarer son constructeur (si besoin) de la manière suivante afin qu'elle de [[yii\base\Object|Object]] doit déclarer son constructeur (si besoin) de la manière suivante afin qu'elle
puisse être configurée correctement: puisse être configurée correctement:
```php ```php
...@@ -93,12 +94,12 @@ class MyClass extends \yii\base\Object ...@@ -93,12 +94,12 @@ class MyClass extends \yii\base\Object
} }
``` ```
Dans ce qui précède, le dernier paramètre du constructeur doit être un tableau de configuration Dans ce qui précède, le dernier paramètre du constructeur doit être un tableau de configuration
qui contient des entrées nom-valeur pour initialiser les propriétés à la fin du constructeur. qui contient des entrées nom-valeur pour initialiser les propriétés à la fin du constructeur.
Vous pouvez remplacer la méthode [[yii\base\Object::init()|init()]] pour le travail d'initialisation qui doit être fait après Vous pouvez remplacer la méthode [[yii\base\Object::init()|init()]] pour le travail d'initialisation qui doit être fait après
que la configuration ait été appliquée. que la configuration ait été appliquée.
En suivant cette convention, vous serez en mesure de créer et de configurer de nouveaux objets En suivant cette convention, vous serez en mesure de créer et de configurer de nouveaux objets
en utilisant un tableau de configuration: en utilisant un tableau de configuration:
```php ```php
...@@ -115,7 +116,7 @@ Plus de détails sur les configurations peuvent être trouvés dans la partie [C ...@@ -115,7 +116,7 @@ Plus de détails sur les configurations peuvent être trouvés dans la partie [C
Evénements Evénements
---------- ----------
Avec Yii 1, les événements étaient créés par la définition d'une méthode `on` (par exemple `onBeforeSave`). Avec Yii 2, vous pouvez maintenant utiliser n'importe quel nom de l'événement. Vous déclenchez un événement en appelant Avec Yii 1, les événements étaient créés par la définition d'une méthode `on` (par exemple `onBeforeSave`). Avec Yii 2, vous pouvez maintenant utiliser n'importe quel nom de l'événement. Vous déclenchez un événement en appelant
la méthode [[yii\base\Component::trigger()|trigger()]] : la méthode [[yii\base\Component::trigger()|trigger()]] :
```php ```php
...@@ -136,16 +137,16 @@ Il y a de nombreuses améliorations dans la gestion des événements. Pour plus ...@@ -136,16 +137,16 @@ Il y a de nombreuses améliorations dans la gestion des événements. Pour plus
Alias Alias
----- -----
Yii 2.0 étend l'utilisation des alias aux fichiers/répertoires et aux URL. Yii 2.0 impose maintenant Yii 2.0 étend l'utilisation des alias aux fichiers/répertoires et aux URL. Yii 2.0 impose maintenant
aux alias de commencer par le caractère `@`, pour différencier les alias de fichiers/répertoires ou URL. aux alias de commencer par le caractère `@`, pour différencier les alias de fichiers/répertoires ou URL.
Par exemple, l'alias `@yii` fait référence au répertoire d'installation de Yii. Les alias ​​sont Par exemple, l'alias `@yii` fait référence au répertoire d'installation de Yii. Les alias ??sont
supportés dans la plupart du code de Yii. Par exemple, [[yii\caching\FileCache::cachePath]] peut prendre supportés dans la plupart du code de Yii. Par exemple, [[yii\caching\FileCache::cachePath]] peut prendre
à la fois un alias et un chemin de répertoire normal. à la fois un alias et un chemin de répertoire normal.
Un alias est aussi étroitement liée aux espaces de noms des classes. Il est recommandé de définir Un alias est aussi étroitement liée aux espaces de noms des classes. Il est recommandé de définir
un alias pour chaque espace de nom racine, ce qui vous permet d'utiliser le chargeur automatique de classe de Yii sans un alias pour chaque espace de nom racine, ce qui vous permet d'utiliser le chargeur automatique de classe de Yii sans
sans devoir en faire d'avantage. Par exemple, vu que `@yii` fait référence au dossier d'installation de Yii, sans devoir en faire d'avantage. Par exemple, vu que `@yii` fait référence au dossier d'installation de Yii,
une classe comme `yii\web\Request` peut être chargée automatiquement. Si vous utilisez une librairie tierce, une classe comme `yii\web\Request` peut être chargée automatiquement. Si vous utilisez une librairie tierce,
telle que Zend Framework, vous pouvez définir un alias de chemin `@Zend` qui fera référence au dossier telle que Zend Framework, vous pouvez définir un alias de chemin `@Zend` qui fera référence au dossier
d'installation de Zend Framework. Une fois que vous avez fait cela, Yii sera aussi en mesure de charger automatiquement une classe de ce framework. d'installation de Zend Framework. Une fois que vous avez fait cela, Yii sera aussi en mesure de charger automatiquement une classe de ce framework.
...@@ -156,8 +157,8 @@ Vues ...@@ -156,8 +157,8 @@ Vues
---- ----
Le changement le plus significatif à propos des vues dans Yii 2 est que la variable spéciale `$this` dans une vue ne fait plus référence au Le changement le plus significatif à propos des vues dans Yii 2 est que la variable spéciale `$this` dans une vue ne fait plus référence au
contrôleur ou widget. Au lieu de cela, `$this` correspond maintenant à un objet *vue*, un nouveau concept contrôleur ou widget. Au lieu de cela, `$this` correspond maintenant à un objet *vue*, un nouveau concept
introduit dans la version 2.0. L'objet *vue* est de type [[yii\web\View]], et représente la partie vue introduit dans la version 2.0. L'objet *vue* est de type [[yii\web\View]], et représente la partie vue
du modèle MVC. Si vous souhaitez accéder au contrôleur ou widget dans une vue, vous pouvez utiliser `$this->context`. du modèle MVC. Si vous souhaitez accéder au contrôleur ou widget dans une vue, vous pouvez utiliser `$this->context`.
Pour afficher une vue depuis une autre vue, utilisez `$this->render()`, et non `$this->renderPartial()`. Le résultat retourné par la méthode `render()` doit être explictement envoyé à la sortie, en effet `render()` retournera la vue au lieu de l'afficher. Par exemple : Pour afficher une vue depuis une autre vue, utilisez `$this->render()`, et non `$this->renderPartial()`. Le résultat retourné par la méthode `render()` doit être explictement envoyé à la sortie, en effet `render()` retournera la vue au lieu de l'afficher. Par exemple :
...@@ -167,7 +168,7 @@ echo $this->render('_item', ['item' => $item]); ...@@ -167,7 +168,7 @@ echo $this->render('_item', ['item' => $item]);
``` ```
Outre l'utilisation de PHP comme langage principal de gabarit, Yii 2.0 supporte également Outre l'utilisation de PHP comme langage principal de gabarit, Yii 2.0 supporte également
deux moteurs de gabarit populaires : Smarty et Twig. Le moteur de gabarit Prado n'est plus supporté. deux moteurs de gabarit populaires : Smarty et Twig. Le moteur de gabarit Prado n'est plus supporté.
Pour utiliser ces moteurs de gabarit, vous devez configurer le composant `view` de l'application en définissant la propriété Pour utiliser ces moteurs de gabarit, vous devez configurer le composant `view` de l'application en définissant la propriété
[[yii\base\View::$renderers|View::$renderers]]. Merci de lire la partie [Moteur de gabarit](tutorial-template-engines.md) pour en savoir plus. [[yii\base\View::$renderers|View::$renderers]]. Merci de lire la partie [Moteur de gabarit](tutorial-template-engines.md) pour en savoir plus.
...@@ -178,7 +179,7 @@ Modèles ...@@ -178,7 +179,7 @@ Modèles
Yii 2.0 utilise la classe [[yii\base\Model]] comme modèle de base, similaire à la classe `CModel` dans la version 1.1. Yii 2.0 utilise la classe [[yii\base\Model]] comme modèle de base, similaire à la classe `CModel` dans la version 1.1.
La classe `CFormModel` a été supprimée. Vous pouvez, à la place, étendre la classe [[yii\base\Model]] afin de créer une classe modèle pour un formulaire. La classe `CFormModel` a été supprimée. Vous pouvez, à la place, étendre la classe [[yii\base\Model]] afin de créer une classe modèle pour un formulaire.
Yii 2.0 introduit une nouvelle méthode appelée [[yii\base\Model::scenarios()|scenarios()]] pour déclarer Yii 2.0 introduit une nouvelle méthode appelée [[yii\base\Model::scenarios()|scenarios()]] pour déclarer
les scénarios pris en charge, et indiquer dans quel scénario un attribut doit être validé, peut être considéré comme sûr ou non, etc. Par exemple: les scénarios pris en charge, et indiquer dans quel scénario un attribut doit être validé, peut être considéré comme sûr ou non, etc. Par exemple:
```php ```php
...@@ -191,8 +192,8 @@ public function scenarios() ...@@ -191,8 +192,8 @@ public function scenarios()
} }
``` ```
Dans ce qui précède, deux scénarios sont déclarés: `backend` et `frontend`. Pour le scénario `backend` les Dans ce qui précède, deux scénarios sont déclarés: `backend` et `frontend`. Pour le scénario `backend` les
propriétés `email` et `role` sont sûres et peuvent être affectées massivement. Pour le scénario `frontend`, propriétés `email` et `role` sont sûres et peuvent être affectées massivement. Pour le scénario `frontend`,
`email` peut être affectée massivement tandis que `role` ne peut pas. `email` et `rôle` doivent être validées en utilisant des règles. `email` peut être affectée massivement tandis que `role` ne peut pas. `email` et `rôle` doivent être validées en utilisant des règles.
La méthode [[yii\base\Model::rules()|rules()]] est toujours utilisée pour déclarer les règles de validation. Remarque : suite à l'introduction de la méthode [[yii\base\Model::scenarios()|scenarios()]], le validateur `unsafe` n'as plus de raison d'être. La méthode [[yii\base\Model::rules()|rules()]] est toujours utilisée pour déclarer les règles de validation. Remarque : suite à l'introduction de la méthode [[yii\base\Model::scenarios()|scenarios()]], le validateur `unsafe` n'as plus de raison d'être.
...@@ -209,7 +210,7 @@ Contrôleurs ...@@ -209,7 +210,7 @@ Contrôleurs
Yii 2.0 utilise la classe [[yii\web\Controller]] comme classe de base des contrôleurs, similaire à la classe `CWebController` dans la version Yii 1.1. Yii 2.0 utilise la classe [[yii\web\Controller]] comme classe de base des contrôleurs, similaire à la classe `CWebController` dans la version Yii 1.1.
[[yii\base\Action]] est la classe de base pour les actions. [[yii\base\Action]] est la classe de base pour les actions.
L'impact le plus évident de ces changements sur votre code est qu'une action de contrôleur doit retourner le contenu L'impact le plus évident de ces changements sur votre code est qu'une action de contrôleur doit retourner le contenu
que vous voulez afficher au lieu de l'envoyer vers la sortie : que vous voulez afficher au lieu de l'envoyer vers la sortie :
```php ```php
...@@ -259,13 +260,13 @@ Thèmes ...@@ -259,13 +260,13 @@ Thèmes
------ ------
Les thèmes fonctionnent tout à fait différemment dans la version 2.0. Ils sont maintenant basés sur un mécanisme de mappage de chemin qui mappe un chemin Les thèmes fonctionnent tout à fait différemment dans la version 2.0. Ils sont maintenant basés sur un mécanisme de mappage de chemin qui mappe un chemin
de fichier de vue à un chemin de fichier de vue thématisée. Par exemple, si le mappage pour un thème est de fichier de vue à un chemin de fichier de vue thématisée. Par exemple, si le mappage pour un thème est
`['/web/views' => '/web/themes/basic']`, alors la version thématisée du fichier de vue `['/web/views' => '/web/themes/basic']`, alors la version thématisée du fichier de vue
`/web/views/site/index.php` sera `/web/themes/basic/site/index.php`. Pour cette raison, les thèmes peuvent maintenant `/web/views/site/index.php` sera `/web/themes/basic/site/index.php`. Pour cette raison, les thèmes peuvent maintenant
être appliqués à n'importe quel fichier de vue, même une vue utilisée en dehors du contexte d'un contrôleur ou d'un widget. être appliqués à n'importe quel fichier de vue, même une vue utilisée en dehors du contexte d'un contrôleur ou d'un widget.
En outre, il n'y a plus de composant `CThemeManager`. A la place, `theme` est une propriété configurable du composant `view` En outre, il n'y a plus de composant `CThemeManager`. A la place, `theme` est une propriété configurable du composant `view`
de l'application. de l'application.
Merci de lire la partie [Thématisation](tutoriel theming.md) pour plus de détails. Merci de lire la partie [Thématisation](tutoriel theming.md) pour plus de détails.
...@@ -278,7 +279,7 @@ doivent étendre la classe [[yii\console\Controller]], similaire à la classe `C ...@@ -278,7 +279,7 @@ doivent étendre la classe [[yii\console\Controller]], similaire à la classe `C
Pour exécuter une commande console, utilisez `yii <route>`, où `<route>` correspond à une route vers un contrôleur Pour exécuter une commande console, utilisez `yii <route>`, où `<route>` correspond à une route vers un contrôleur
(par exemple `sitemap/index`). Les arguments anonymes supplémentaires sont passés comme paramètres à (par exemple `sitemap/index`). Les arguments anonymes supplémentaires sont passés comme paramètres à
l'action du contrôleur correspondant, alors que les arguments nommés sont analysés selon l'action du contrôleur correspondant, alors que les arguments nommés sont analysés selon
les options déclarées dans la méthode [[yii\console\Controller::options()]]. les options déclarées dans la méthode [[yii\console\Controller::options()]].
Yii 2.0 prend en charge la génération automatique d'aide à partir des blocs de commentaire. Yii 2.0 prend en charge la génération automatique d'aide à partir des blocs de commentaire.
...@@ -289,10 +290,10 @@ Merci de lire la partie [Commandes console](tutoriel-console.md) pour plus de dà ...@@ -289,10 +290,10 @@ Merci de lire la partie [Commandes console](tutoriel-console.md) pour plus de dÃ
I18N I18N
---- ----
Yii 2.0 supprime les fonctionnalités internes de formattage de dates et nombres, en faveur du [module PHP PECL intl] (http://pecl.php.net/package/intl). Yii 2.0 supprime les fonctionnalités internes de formattage de dates et nombres, en faveur du [module PHP PECL intl] (http://pecl.php.net/package/intl).
La traduction de message est désormais effectuée via le composant d'application `i18n`. La traduction de message est désormais effectuée via le composant d'application `i18n`.
Ce composant gère un ensemble de sources de messages, ce qui vous permet d'utiliser différentes Ce composant gère un ensemble de sources de messages, ce qui vous permet d'utiliser différentes
sources de messages en fonction de catégories. sources de messages en fonction de catégories.
Merci de lire la partie [Internationalisation](tutoriel i18n.md) pour plus de détails. Merci de lire la partie [Internationalisation](tutoriel i18n.md) pour plus de détails.
...@@ -352,9 +353,9 @@ Merci de lire la partie [Assistants](helper-overview.md) pour plus de détails. ...@@ -352,9 +353,9 @@ Merci de lire la partie [Assistants](helper-overview.md) pour plus de détails.
Formulaires Formulaires
----------- -----------
Yii 2.0 introduit le concept de *champ* pour la construction d'un formulaire à l'aide de la classe [[yii\widgets\ActiveForm]]. Un champ Yii 2.0 introduit le concept de *champ* pour la construction d'un formulaire à l'aide de la classe [[yii\widgets\ActiveForm]]. Un champ
est un conteneur constitué d'une étiquette, d'une entrée, d'un message d'erreur, et/ou d'un texte d'aide. est un conteneur constitué d'une étiquette, d'une entrée, d'un message d'erreur, et/ou d'un texte d'aide.
Un champ est représenté comme un objet de la classe [[yii\widgets\ActiveField|ActiveField]]. Un champ est représenté comme un objet de la classe [[yii\widgets\ActiveField|ActiveField]].
En utilisant des champs, vous pouvez construire un formulaire plus proprement qu'avant: En utilisant des champs, vous pouvez construire un formulaire plus proprement qu'avant:
```php ```php
...@@ -373,7 +374,7 @@ Merci de lire la partie [Créer des formulaires](input-forms.md) pour plus de dà ...@@ -373,7 +374,7 @@ Merci de lire la partie [Créer des formulaires](input-forms.md) pour plus de dÃ
Constructeur de requête Constructeur de requête
----------------------- -----------------------
Dans la version 1.1, la construction des requêtes était dispersée dans plusieurs classes, y compris `CDbCommand`, Dans la version 1.1, la construction des requêtes était dispersée dans plusieurs classes, y compris `CDbCommand`,
`CDbCriteria` et `CDbCommandBuilder`. Avec Yii 2.0, une requête de base de données est représentée par un objet de la classe [[yii\db\Query|Query]] `CDbCriteria` et `CDbCommandBuilder`. Avec Yii 2.0, une requête de base de données est représentée par un objet de la classe [[yii\db\Query|Query]]
qui peut être transformé en une instruction SQL à l'aide de la classe [[yii\db\QueryBuilder|QueryBuilder]]. qui peut être transformé en une instruction SQL à l'aide de la classe [[yii\db\QueryBuilder|QueryBuilder]].
Par exemple: Par exemple:
...@@ -397,23 +398,22 @@ Merci de lire la partie [Constructeur de requête](db-query-builder.md) pour plu ...@@ -397,23 +398,22 @@ Merci de lire la partie [Constructeur de requête](db-query-builder.md) pour plu
Active Record Active Record
------------- -------------
Yii 2.0 introduces a lot of changes to [Active Record](db-active-record.md). The two most obvious ones involve Yii 2.0 introduit beaucoup de modifications au modèle [Active Record](db-active-record.md). Les deux plus évidentes concernent la construction des requêtes et la manipulation de requêtes relationnelles.
query building and relational query handling.
The `CDbCriteria` class in 1.1 is replaced by [[yii\db\ActiveQuery]] in Yii 2. That class extends from [[yii\db\Query]], and thus La classe `CDbCriteria` en 1.1 est remplacée par [[yii\db\ActiveQuery]] dans Yii 2. Cette classe étend [[yii\db\Query]],
inherits all query building methods. You call [[yii\db\ActiveRecord::find()]] to start building a query: et hérite donc de toutes les méthodes de construction de requête. Pour commencer à construire une requête il suffit d'utiliser [[yii\db\ActiveRecord::find()]] :
```php ```php
// To retrieve all *active* customers and order them by their ID: // Pour récupérer tous les clients *actifs* et les trier selon leur identifiant
$customers = Customer::find() $customers = Customer::find()
->where(['status' => $active]) ->where(['status' => $active])
->orderBy('id') ->orderBy('id')
->all(); ->all();
``` ```
To declare a relation, simply define a getter method that returns an [[yii\db\ActiveQuery|ActiveQuery]] object. Pour déclarer une relation, il suffit de définir un accesseur qui renvoie un objet [[yii\db\ActiveQuery|ActiveQuery]].
The property name defined by the getter represents the relation name. For example, the following code declares Le nom de la propriété définie par l'accesseur représente le nom de la relation. Par exemple, le code suivant déclare
an `orders` relation (in 1.1, you would have to declare relations in a central place `relations()`): une relation `orders` (en 1.1, vous aviez à déclarer les relations dans la méthode `relations()`):
```php ```php
class Customer extends \yii\db\ActiveRecord class Customer extends \yii\db\ActiveRecord
...@@ -425,28 +425,30 @@ class Customer extends \yii\db\ActiveRecord ...@@ -425,28 +425,30 @@ class Customer extends \yii\db\ActiveRecord
} }
``` ```
Now you can use `$customer->orders` to access a customer's orders from the related table. You can also use the following code Maintenant vous pouvez utiliser `$customer->orders` pour accéder aux commandes du client depuis la table liée.
to perform an on-the-fly relational query with a customized query condition: Vous pouvez aussi utiliser le code suivant pour effectuer une requête relationnelle à la volée avec une condition
personnalisée :
```php ```php
$orders = $customer->getOrders()->andWhere('status=1')->all(); $orders = $customer->getOrders()->andWhere('status=1')->all();
``` ```
When eager loading a relation, Yii 2.0 does it differently from 1.1. In particular, in 1.1 a JOIN query Lors du chargement anticipé (*eager loading*) d'une relation, Yii 2.0 fonctionne différemment de la version 1.1.
would be created to select both the primary and the relational records. In Yii 2.0, two SQL statements are executed En particulier avec Yii 1.1, une jointure était créée pour sélectionner à la fois l'enregistrement principal et les
without using JOIN: the first statement brings back the primary records and the second brings back the relational enregistrements liés. Avec Yii 2.0, deux instructions SQL sont exécutées sans utiliser de jointure : la première
records by filtering with the primary keys of the primary records. récupère les enregistrements principaux et la seconde récupère les enregistrements liés en filtrant selon les clés
primaires des enregistrements principaux.
Instead of returning [[yii\db\ActiveRecord|ActiveRecord]] objects, you may chain the [[yii\db\ActiveQuery::asArray()|asArray()]] Au lieu de retourner des objets [[yii\db\ActiveRecord|ActiveRecord]], vous pouvez utiliser la méthode
method when building a query to return a large number of records. This will cause the query result to be returned [[yii\db\ActiveQuery::asArray()|asArray()]] lors de la construction d'une requête pour renvoyer un grand nombre
as arrays, which can significantly reduce the needed CPU time and memory if large number of records . For example, d'enregistrements. Ainsi le résultat retourné sera sous forme de tableaux, ce qui peut réduire considérablement le temps de calcul nécessaire et la mémoire dans le cas d'un grand nombre d'enregistrements. Par exemple:
```php ```php
$customers = Customer::find()->asArray()->all(); $customers = Customer::find()->asArray()->all();
``` ```
Another change is that you can't define attribute default values through public properties anymore. Un autre changement est que vous ne pouvez plus définir les valeurs par défaut des attributs en utilisant des propriétés
If you need those, you should set them in the init method of your record class. publiques. Si vous avez besoin, vous devez utiliser la méthode `init` de la classe de votre modèle.
```php ```php
public function init() public function init()
...@@ -456,30 +458,32 @@ public function init() ...@@ -456,30 +458,32 @@ public function init()
} }
``` ```
There where some problems with overriding the constructor of an ActiveRecord class in 1.1. These are not present in Il y avait des problèmes de surcharge du constructeur de la classe ActiveRecord 1.1. Ces problèmes n'existent plus dans
version 2.0 anymore. Note that when adding parameters to the constructor you might have to override [[yii\db\ActiveRecord::instantiate()]]. la version 2.0. Notez que lorsque vous ajoutez des paramètres au constructeur, vous avez éventuellement à surcharger
la méthode [[yii\db\ActiveRecord::instantiate()]].
There are many other changes and enhancements to Active Record. Please refer to Il y a beaucoup d'autres modifications et améliorations à Active Record.
the [Active Record](db-active-record.md) section for more details. Merci de lire la partie [Active Record](db-active-record.md) pour en savoir plus.
User and IdentityInterface User et IdentityInterface
-------------------------- -------------------------
The `CWebUser` class in 1.1 is now replaced by [[yii\web\User]], and there is no more La classe `CWebUser` 1.1 est maintenant remplacé par [[yii\web\User]], et il n'y a plus de classe `CUserIdentity`.
`CUserIdentity` class. Instead, you should implement the [[yii\web\IdentityInterface]] which Au lieu de cela, vous devez implémenter [[yii\web\IdentityInterface]] qui est beaucoup plus simple à utiliser.
is much more straightforward to use. The advanced application template provides such an example. Le modèle d'application avancé fournit un exemple.
Please refer to the [Authentication](security-authentication.md), [Authorization](security-authorization.md), and [Advanced Application Technique](tutorial-advanced-app.md) sections for more details. Merci de lire les parties [Authentification](security-authentication.md), [Authorisation](security-authorization.md), et
[Modèle application avancée](tutorial-advanced-app.md) pour en savoir plus.
URL Management Gestion des URL
-------------- ---------------
URL management in Yii 2 is similar to that in 1.1. A major enhancement is that URL management now supports optional La gestion des URL dans Yii 2 est similaire à celle disponible dans la version 1.1. Une amélioration majeure est que la
parameters. For example, if you have a rule declared as follows, then it will match gestion des URL supporte désormais les paramètres optionnels. Par exemple, si vous avez une règle déclarée comme suit,
both `post/popular` and `post/1/popular`. In 1.1, you would have had to use two rules to achieve cela fera correspondre `post/popular` et `post/1/popular`. Dans la version 1.1, il fallait utiliser deux règles pour
the same goal. atteindre le même objectif.
```php ```php
[ [
...@@ -489,11 +493,11 @@ the same goal. ...@@ -489,11 +493,11 @@ the same goal.
] ]
``` ```
Please refer to the [Url manager docs](url.md) section for more details. Merci de lire la partie [Gestion des URL](url.md) pour en savoir plus.
Using Yii 1.1 and 2.x together Utiliser Yii 1.1 et 2.x ensemble
------------------------------ --------------------------------
If you have legacy Yii 1.1 code that you want to use together with Yii 2.0, please refer to Si vous avez du code Yii 1.1 que vous souhaitez réutiliser avec Yii 2, merci de lire la partie [Utiliser Yii 1.1 et 2.0 ensemble](extend-using-v1-v2.md).
the [Using Yii 1.1 and 2.0 Together](extend-using-v1-v2.md) section.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment