A ce niveau, vous avez une base de données appelée `yii2basic`, et dedans, une table `country` comportant trois colonnes, contenant dix lignes de données.
Configurer une Connexion à la BDD <a name="configuring-db-connection"></a>
---------------------------
Avant de continuer, assurons nous que vous avez installé à la fois l'extension PHP
[PDO](http://www.php.net/manual/fr/book.pdo.php) et le pilote PDO pour la base de données que vous utilisez (c'est
à dire `pdo_mysql` pour MySQL). C'est une exigence de base si votre application utilise une base de données
relationnelle.
Une fois ces éléments installés, ouvrez le fichier `config/db.php` et modifiez les paramètres pour qu'ils correspondent à votre base de données. Par défaut, le fichier contient ce qui suit :
```php
<?php
return[
'class'=>'yii\db\Connection',
'dsn'=>'mysql:host=localhost;dbname=yii2basic',
'username'=>'root',
'password'=>'',
'charset'=>'utf8',
];
```
Le fichier `config/db.php` est un exemple type d'outil de [configuration](concept-configurations.md) basé sur un
fichier. Ce fichier de configuration en particulier spécifie les paramètres nécessaires à la création et
l'initialisation d'une instance de [[yii\db\Connection]] grâce à laquelle vous pouvez effectuer des requêtes SQL
dans la base de données sous-jacente.
On peut accéder à connexion à la BDD configurée ci-dessus depuis le code de l'application vial'expression
`Yii::$app->db`.
> Info: Le fichier `config/db.php` sera inclus par la configuration principale de l'application `config/web.php`,
qui spécifie comment l'instante d'[application](structure-applications.md) doit être initialisée.
Pour plus d'informations, merci de vous référer à la section [Configurations](concept-configurations.md).
Créer un Active Record <a name="creating-active-record"></a>
-------------------------
Pour représenter et aller chercher des données dans la table `country`, créez une classe dérivée d'[Active Record](db-active-record.md) appelée `Country`, et enregistrez la dans le fichier `models/Country.php`.
```php
<?php
namespaceapp\models;
useyii\db\ActiveRecord;
classCountryextendsActiveRecord
{
}
```
La classe `Country` étend [[yii\db\ActiveRecord]]. Vous n'avez pas besoin d'y écrire le moindre code ! Simplement avec
le code ci-dessus, Yii devinera le nom de la table associée au nom de la class.
> Info: Si aucune correspondance directe ne peut être faite à partir du nom de la classe, vous pouvez outrepasser la méthode [[yii\db\ActiveRecord::tableName()]] pour spécifier explicitement un nom de table.
A l'aide de la classe `Country`, vous pouvez facilement manipuler les données de la table `country`, comme dans les bribes suivantes :
```php
useapp\models\Country;
// chercher toutes les lignes de la table pays et les trier par "name"
// chercher la ligne dont la clef primaire est "US"
$country=Country::findOne('US');
// afficher "United States"
echo$country->name;
// remplace le nom du pays par "U.S.A." et le sauvegarde dans la base de données
$country->name='U.S.A.';
$country->save();
```
> Info: Active Record est un moyen puissant pour accéder et manipuler des données d'une base de manière orientée objet.
Vous pouvez trouver plus d'informations dans la section [Active Record](db-active-record.md). Sinon, vous pouvez
également interagir avec une base de données en utilisant une méthode de plus bas niveau d'accès aux données appelée
[Data Access Objects](db-dao.md).
Créer une Action <a name="creating-action"></a>
------------------
Pour exposer les données pays aux utilisateurs, vous devez créer une action. Plutôt que de placer la nouvelle action
dans le contrôleur `site`, comme vous l'avez fait dans les sections précédentes, il est plus cohérent de créer un
nouveau contrôleur spécifiquement pour toutes les actions liées aux données pays. Nommez ce contrôleur
`CountryController`, et créez-y une action `index`, comme suit.
```php
<?php
namespaceapp\controllers;
useyii\web\Controller;
useyii\data\Pagination;
useapp\models\Country;
classCountryControllerextendsController
{
publicfunctionactionIndex()
{
$query=Country::find();
$pagination=newPagination([
'defaultPageSize'=>5,
'totalCount'=>$query->count(),
]);
$countries=$query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return$this->render('index',[
'countries'=>$countries,
'pagination'=>$pagination,
]);
}
}
```
Enregistrez le code ci-dessus dans le fichier `controllers/CountryController.php`.
L'action `index` appelle `Country::find()`. Cette méthode Active Record construit une requête de BDD et récupère toutes
les données de la table `country`.
Pour limiter le nombre de pays retournés par chaque requête, la requête est paginée à l'aide d'un objet
[[yii\data\Pagination]]. L'objet `Pagination` dessert deux buts :
* Il ajuste les clauses `offset` et `limit` de la déclaration SQL représentée par la requête afin qu'elle en retourne
qu'une page de données à la fois (au plus 5 colonnes par page).
* Il est utilisé dans la vue pour afficher un pagineur qui consiste en une liste de boutons de page, comme nous
l'expliquerons dans la prochaine sous-section.
A la fin du code, l'action `index` effectue le rendu d'une vue nommée `index`, et lui transmet les données pays ainsi que les informations de pagination.
Créer une Vue <a name="creating-view"></a>
---------------
Dans le dossier `views`, commencez par créer un sous-dossier nommé `country`. Ce dossier sera utilisé pour contenir
toutes les vues rendues par le contrôleur `country`. Dans le dossier `views/country`, créez un fichier nommé