Comment programmer avec Yii2 Travailler avec la base de données et l'enregistrement actif

Ce que vous allez créer

Si vous demandez, "Qu'est-ce que Yii?" Découvrez mon tutoriel précédent: Introduction au framework Yii, qui passe en revue les avantages de Yii et inclut un aperçu des nouveautés de Yii 2.0, publié le 12 octobre 2014.

Dans Programmation avec Yii2: Mise en route, nous avons configuré Yii2 en local, créé une application Hello World, configuré un serveur distant et utilisé GitHub pour déployer notre code. Dans la deuxième partie, nous avons appris comment Yii avait implémenté son architecture Model View Controller et expliqué comment créer des pages Web et des formulaires permettant de collecter et de valider des données. Dans ce didacticiel, nous utiliserons les fonctionnalités de base de données et d'enregistrement actif de Yii pour automatiser la génération de code pour une application Web de base..

Pour ces exemples, nous allons continuer à imaginer que nous construisons un cadre pour la publication de mises à jour de statut simples, par exemple. notre propre mini-Twitter.

1. Créer votre base de données

Premièrement, nous devons créer une base de données dans notre environnement de développement. Je le fais via l'interface utilisateur Web PHPMyAdmin de MAMP. Accédez à PHPMyAdmin, par exemple. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, choisissez le Bases de données onglet et créer une base de données appelée Bonjour:

Vous pouvez également utiliser l'interface de ligne de commande MySQL.

Nous allons maintenant fournir les informations d'identification de la base de données au fichier de configuration de la base de données de Yii. Ouvrir /hello/config/db.php et fournissez vos identifiants de base de données MySQL. Les miens ressemblent à ceci:

 'yii \ db \ Connection', 'dsn' => 'mysql: host = localhost; nombase = bonjour', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8 ',]; 

Nous allons maintenant créer notre première migration de base de données. Une migration fournit un moyen de programmation pour créer et mettre à jour des schémas de base de données. Cela est particulièrement utile si vous utilisez plusieurs serveurs ou dans différents environnements. Cela élimine la difficulté d'importer des scripts SQL.

Pour nos exemples de codage, vous pouvez utiliser le référentiel Git du dernier tutoriel à suivre, ou vous pouvez télécharger le référentiel complet ici..

Créer la migration

Notre première migration créera la table Status. Ouvrez Terminal et entrez les informations suivantes:

cd ~ / Sites / hello ./yii migrate / create create_status_table

Cela devrait ressembler à ceci, quand vous aurez fini:

Quand vous ouvrez \ hello \ migrations, vous verrez un fichier nommé similaire à m141201_013120_create_status_table.php. Cela devrait ressembler à ceci une fois ouvert:

C'est le code de migration par défaut fourni par Yii. Ensuite, nous le mettrons à jour pour fournir les champs dont nous avons besoin..

Construire la table d'état

Notre table Status stockera le texte du message et précisera si un message est privé ou public. Chaque ligne aura également un identifiant, créer et mettre à jour les champs horaires.

Mettez à jour votre code de migration vers le nôtre:

fonction publique up () $ tableOptions = null; if ($ this-> db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB';  $ this-> createTable ('% status', ['id' => Schema :: TYPE_PK, 'message' => Schema :: TYPE_TEXT. 'NOT NULL DEFAULT "" ",' permissions '=> Schema :: TYPE_SMALLINT. 'NOT NULL DEFAULT 0', 'created_at' => Schéma :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schéma :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions);  public function down () $ this-> dropTable ('% status'); 

Notez comment nous avons ajouté des définitions pour les champs dont nous avons besoin, tels que message, autorisations, créé à, et updated_at.

Exécuter la migration

Pour que Yii crée la table, nous devons exécuter la migration. C'est facile. De nouveau au terminal, nous courons ./ yii migrer / up:

$ ./yii migrate / up Outil de migration Yii (basé sur Yii v2.0.0) Total 1 nouvelle migration à appliquer: m141201_013120_create_status_table Appliquer la migration ci-dessus? (yes | no) [no]: yes *** application de m141201_013120_create_status_table> créer une table % status… done (heure: 0,032s) *** appliquée m141201_013120_create_status_table (heure: 0.038s). 

Si vous parcourez la table à l'aide de PHPMyAdmin, vous devriez voir quelque chose comme ceci:

Maintenant que nous avons créé la table de base de données, nous pouvons commencer à utiliser Gii, le puissant générateur d'échafaudages de Yii, pour automatiser tout le code du contrôleur de vue de modèle..

2. Utilisation de Gii: le générateur de code Yii

Gii est le générateur de code d'échafaudage de Yii. Il utilise sa connaissance du schéma de votre base de données pour générer un code de contrôleur de vue de modèle par défaut bien écrit pour votre application. Gii peut transformer un schéma de base de données en une application Web de travail de base en quelques minutes. C'est incroyablement puissant. Laissez-moi vous montrer comment ça marche.

Construire le modèle

Avec Gii, nous commençons par créer un modèle basé sur chaque table de base de données créée. Pour notre exemple, nous allons utiliser la table Status.

Pour commencer à utiliser Gii, accédez à votre application Web et ajoutez / gii, par exemple. http: // localhost: 8888 / hello / web / gii. Vous verrez quelque chose comme ça:

Cliquer sur Générateur de modèle, et entrez statut dans le Nom de la table champ:

Quand vous cliquez Aperçu, il vous montrera quels fichiers il va construire. Comme nous avons déjà un fichier de modèle Status.php du dernier tutoriel, cliquez sur Écraser. Puis clique produire.

Les résultats ressembleront à ceci:

Ouvrez le /hello/models/Status.php fichier et vous verrez les règles de validation de base et les attributs de formulaire que Yii a construits pour nous:

 'ID', 'message' => 'Message', 'permissions' => 'Autorisations', 'created_at' => 'Créé à', 'updated_at' => 'Mis à jour à',];  

Construire l'interface Web

Maintenant, il est temps d'utiliser Gii pour créer le contrôleur et les vues de la table Status. Retournez à la page d'accueil de Gii et cliquez sur Générateur CRUD, par exemple. http: // localhost: 8888 / hello / web / gii / crud:

Pour Classe de modèle, entrer app \ models \ Status (ces entrées sont sensibles à la casse). Pour Rechercher une classe de modèle, entrer app \ models \ StatusSearch. Pour Classe de contrôleur, entrer app \ controllers \ StatusController. Ça devrait ressembler à ça:

Cliquez sur Aperçu. Vous verrez ce qui suit-assurez-vous de cliquer Écraser encore une fois car nous avons des fichiers plus anciens du dernier tutoriel qui doivent être mis à jour:

Quand vous cliquez produire, vous verrez tous les contrôleurs et voir les fichiers générés:

Les pages CRUD par défaut

Naviguez dans votre navigateur pour http: // localhost: 8888 / hello / web / status, et vous verrez la page d'index CRUD générée. Comme il n'y a pas encore de ligne dans la base de données, elle apparaîtra vide.

Maintenant, cliquez sur Créer un statut et vous verrez le formulaire de création de statut par défaut créé par Gii:

Il est assez étonnant de voir à quelle vitesse Gii crée un code fonctionnel pour nous. Ensuite, nous allons personnaliser le code d'échafaudage pour que cela fonctionne pour nous..

3. Personnaliser notre code

Personnaliser la vue formulaire

Nettoyons le formulaire. Dans /hello/views/Status/_form.php, supprimez les champs créés et mis à jour:

 champ ($ model, 'created_at') -> textInput ()?> champ ($ model, 'updated_at') -> textInput ()?> 

Remplacez le champ des autorisations par le code de la liste déroulante créé dans la deuxième partie de cette série:

field ($ model, 'permissions') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Choisissez vos permissions -'])?>

Nous devons mettre le obtenirPermissions fonctionne également dans le modèle. modifier /hello/models/Status.php. Remettez en place les fonctions de définitions et autorisations constantes:

 const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20;… fonction publique getPermissions () return array (self :: PERMISSIONS_PRIVATE => 'Privé', self :: PERMISSIONS_PUBLIC => 'Public');  fonction publique getPermissionsLabel ($ permissions) if ($ permissions == self :: PERMISSIONS_PUBLIC) return 'Public';  else return 'Private'; 

Votre nouveau formulaire de statut devrait ressembler à ceci:

Nous devons ajuster un peu le contrôleur pour que le formulaire soit correctement sauvegardé.

Personnaliser le contrôleur

Dans /hello/controllers/StatusController.php, remplace le actionCréer méthode avec ce code:

fonction publique actionCreate () $ model = new Status (); if ($ model-> load (Yii :: $ app-> request-> post ())) $ model-> created_at = time (); $ model-> updated_at = time (); if ($ model-> save ()) return $ this-> redirect (['view', 'id' => $ model-> id]);  return $ this-> render ('create', ['model' => $ model,]); 

Lorsque le formulaire est posté, nous définissons manuellement le créé à et updated_at champs, puis on enregistre les données dans la base de données. 

Lorsque vous enregistrez votre première mise à jour de statut, la page d'affichage suivante s'affiche:

Ajuster la mise en page

Réajusterons la barre de navigation pour qu’elle ne descende pas pour Status mais passe directement à la page d’index de Status. modifier /hello/views/layouts/main.php et remplacer le Nav :: widget code avec ceci:

echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Statut', 'url' => ['/ status / index']], ['label' => 'À propos de', 'url' => [ '/ site / about']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Login', 'url' => ['/ site / login']]: ['label' => 'Déconnexion ('. Yii :: $ app-> utilisateur-> identité-> nom d'utilisateur. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post'],],]);

La vue en grille

Lorsque vous revenez à la vue d'index d'état, vous pouvez voir la grille Yii2 remplie de données:

Le code qui génère cette page est en /hello/views/status/index.php:

title = 'Statuses'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?> 

titre)?>

render ('_ search', ['model' => $ searchModel]); ?>

'btn btn-success'])?>

$ dataProvider, 'filterModel' => $ searchModel, 'columns' => [['class' => 'yii \ grid \ SerialColumn'], 'id', 'message: ntext', 'permissions', 'created_at', 'updated_at', ['class' => 'yii \ grid \ ActionColumn'],],]); ?>

Si vous essayez de trier les colonnes et d'afficher, de mettre à jour et de supprimer des icônes, vous verrez que Gii a également créé toutes les fonctionnalités pour ces fonctionnalités..

En quelques minutes, nous avons donc créé un schéma pour notre base de données et généré un modèle ainsi que tout le code d'application Web nécessaire à une application de base. J'espère que vous avez trouvé les capacités de génération de code de Yii aussi impressionnantes que moi.

Et après?

Ensuite, je vais vous montrer comment intégrer les fonctionnalités d'enregistrement et de connexion des utilisateurs dans notre application afin que nous puissions établir des relations de jonction entre les messages d'état et des utilisateurs spécifiques..

Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi @reifman sur Twitter ou consultez ma page d'instructeurs Tuts +. Ma page d’instructeur comprendra tous les articles de cette série dès leur publication..

Liens connexes

  • Yii Framework Site
  • Introduction au framework Yii (Tuts +) 
  • Autres exemples de développeurs Yii de logiciels libres et Open Source de l'auteur