Comment programmer avec Yii2 Utilisation du modèle d'application avancé

Ce que vous allez créer

Si vous demandez, "Qu'est-ce que Yii?" check-out Introduction au framework Yii, qui passe en revue les avantages de Yii et comprend un aperçu de Yii 2.0.

Dans cette série de programmation avec Yii2, je guide les lecteurs dans l'utilisation du framework Yii2 pour PHP. Lorsque vous commencez à utiliser Yii pour un développement réel, vous souhaiterez peut-être démarrer votre prochain projet avec son modèle d'application avancée. Entre autres choses, il fournit des fonctionnalités intégrées de gestion des utilisateurs ainsi que deux applications, l’une pour le client frontal et l’autre, un serveur administratif..

Dans ce tutoriel, je vais vous présenter le modèle avancé Yii2 et vous guider à travers la configuration et l'utilisation de base. Pendant la programmation avec Yii2: Intégration d’enregistrement d’utilisateur a exploré l’implémentation de la gestion des utilisateurs au-dessus du modèle de base avec l’extension Yii2 User, ce didacticiel lancera un nouveau référentiel avec le modèle avancé plutôt que de continuer à utiliser des exemples sur notre base de base Yii hello code. 

Avant de commencer, rappelez-vous que j’essaie de participer aux discussions ci-dessous. Si vous avez une question ou une suggestion de sujet, veuillez poster un commentaire ci-dessous ou contactez-moi sur Twitter @reifman. Vous pouvez aussi m'envoyer un email directement.

Si vous avez remarqué qu'il y a eu un retard dans cette série, c'est parce que je suis de retour d'une opération au cerveau. Nous vous remercions de votre patience et de votre soutien. Je suis heureux de pouvoir écrire de nouveau régulièrement et je suis impatient de poursuivre la couverture de Yii2..

Comment le modèle avancé est différent

La raison la plus utile de migrer vers le modèle avancé est sa mise en œuvre de fonctionnalités de gestion des utilisateurs telles que l'inscription, la connexion, la déconnexion et la réinitialisation des mots de passe..

Le modèle avancé fournit également plusieurs arborescences d'accès pour une application Web plus grande. Il dispose d'une application Web front-end et back-end pour les utilisateurs finaux et les administrateurs. Mais cela pourrait également être étendu, par exemple pour les modérateurs ou une API spéciale, bien qu'il existe d'autres moyens d'intégrer ces fonctionnalités dans une seule application..

Voici un tableau montrant les principales différences entre la version de base vanille Yii et l'installation avancée:

Dans mes derniers tutoriels sur l'extension Yii2 User, je suis de plus en plus impressionné par ses fonctionnalités qui constituent une alternative au modèle avancé. Cependant, il peut également être facilement intégré à l'une ou l'autre installation..

Il vaut la peine d’explorer le modèle avancé avant de commencer un projet majeur. Je suis sur le point de t'aider à le faire.

Installation du modèle avancé

Commençons par installer le modèle avancé avec Yii2. Nous pouvons suivre les instructions du projet de modèle avancé sur GitHub.

Mise à jour du compositeur

Premièrement, nous allons nous assurer que Compositeur dispose des packages nécessaires:

$ composer global require "fxp / composer-asset-plugin: ~ 1.0.3" Changement du répertoire en cours en /Users/Jeff/.composer ./composer.json a été mis à jour Chargement des référentiels composer avec des informations sur les paquetages Mise à jour des dépendances (y compris require-dev ) Rien à installer ou à mettre à jour Générer des fichiers à chargement automatique

Installer Yii avec le modèle avancé

Ensuite, nous pouvons installer Yii avec le modèle de projet avancé. Nous appellerons notre application de tutoriel Yiiplus:

$ composer create-project --prefer-dist yiisoft / yii2-app-advanced yiiplus Installer yiisoft / yii2-app-advanced (2.0.6) - Installation de yiisoft / yii2-app-advanced (2.0.6) Chargement à partir du cache Projet créé in yiiplus Chargement des référentiels de compositeur avec les informations de paquet Installation de dépendances (y compris require-dev) - Installation de yiisoft / yii2-composer (2.0.3) Chargement à partir du cache - Installation de ezyang / htmlpurifier (v4.6.0) Chargement à partir du cache - Installation de cebe / markdown ( 1.1.0) Chargement à partir du cache - Installation de bower-asset / jquery (2.1.4) Chargement à partir du cache - Installation de bower-asset / jquery.inputmask (3.1.63) Chargement à partir du cache - Installation de bower-asset / punycode (v1.3.2 ) Chargement depuis le cache - Installation de bower-asset / yii2-pjax (v2.0.4) Chargement depuis le cache - Installation de yiisoft / yii2 (2.0.6) Chargement depuis le cache - Installation de swiftmailer / swiftmailer (v5.4.1) Chargement depuis le cache - Installation de yiisoft / yii2-swiftmailer (2.0.4) Chargement depuis le cache - Installation de yiisoft / yii2-codeception (2.0.4) Chargement depuis le cache - Inst alling bower-asset / bootstrap (v3.3.5) Chargement depuis le cache - Installation de yiisoft / yii2-bootstrap (2.0.5) Chargement depuis le cache - Installation de yiisoft / yii2-debug (2.0.5) Chargement depuis le cache - Installation de bower-asset / typeahead.js (v0.10.5) Chargement depuis le cache - Installation de phpspec / php-diff (v1.0.2) Chargement depuis le cache - Installation de yiisoft / yii2-gii (2.0.4) Chargement depuis le cache - Installation de fzaninotto / faker (v1.5.0 ) Chargement à partir du cache - Installation de yiisoft / yii2-faker (2.0.3) Chargement à partir du cache Écriture d’un fichier de verrouillage Génération de fichiers à chargement automatique

Initialisation de notre application Yii

Maintenant, initialisons notre application: 

$ cd ~ / Sites / yiiplus $ php init Yii Outil d'initialisation d'application v1.0 Dans quel environnement souhaitez-vous que l'application soit initialisée? [0] Développement [1] Production Votre choix [0-1, ou "q" pour quitter] 0 Initialiser l'application dans l'environnement "Développement"? [oui | non] oui Démarrer l'initialisation… générer le backend / config / main-local.php générer le backend / config / params-local.php générer le backend / web / index-test.php générer le backend / web / index.php générer le commun / config / main-local.php generer commun / config / params-local.php generer console / config / main-local.php generer console / config / params-local.php generer frontend / config / main-local.php generer frontend / config / params-local.php générer frontend / web / index-test.php générer frontend / web / index.php générer yii générer clé de validation de cookie dans backend / config / main-local.php générer clé de validation de cookie dans frontend / config / main-local.php chmod 0777 backend / runtime chmod 0777 backend / web / assets chmod 0777 frontend / runtime chmod 0777 frontal / web / assets chmod 0755 yii chmod 0755 tests / codeception / bin / yii… initialisation terminée.

Préparer la base de données

Ensuite, je vais utiliser la version installée de MAMP de PHPMyAdmin pour créer la base de données:

Cliquez sur Créer. En prenant des captures d'écran pour le tutoriel, j'ai oublié de cliquer sur créer, puis je me suis demandé pourquoi je ne pouvais pas migrer ma base de données. Elle n'existait pas encore..

Ensuite, éditez /common/config/main-local.php pour inclure les paramètres de votre base de données:

 ['db' => ['class' => 'yii \ db \ Connection', 'dsn' => 'mysql: host = localhost; dbname = yiiplus', 'username' => 'root', 'password' = > '-localmysqldevpwd-', 'charset' => 'utf8',], 'mailer' => [ 

Ensuite, vous êtes prêt à exécuter la migration de la base de données pour initialiser votre application. Cela configure principalement la table pour la gestion des utilisateurs:

$ ./yii migrate Yii Migration Tool (basé sur Yii v2.0.6) Création du tableau d’historique de migration "migration"… Terminé. Total 1 nouvelle migration à appliquer: m130524_201442_init Appliquer la migration ci-dessus? (yes | no) [no]: yes *** application de m130524_201442_init> créer une table % user… done (heure: 0,007s) *** appliqué m130524_201442_init (heure: 0.022s) Migration réussie. 

Configuration d'Apache pour les sites frontaux et principaux

Lorsque nous configurons notre environnement de développement ou de production avec le modèle avancé, nous devons pointer le serveur Web vers un chemin racine différent, deux en réalité.. 

Premièrement, nous allons éditer notre fichier hosts pour inclure frontend.dev et backend.dev:

$ more / etc / hosts 127.0.0.1 localhost 127.0.0.1 frontend.dev 127.0.0.1 backend.dev

Dans mon environnement de développement avec MAMP, je vais lier mon répertoire yiiplus aux htdocs de MAMP:

 $ cd / Applications / MAMP / htdocs / $ ln -s ~ / Sites / yiiplus / Applications / MAMP / htdocs / yiiplus

Ensuite, je vais activer (annuler le commentaire) l'include pour les hôtes virtuels:

$ nano /Applications/MAMP/conf/apache/httpd.conf # Hôtes virtuels Inclure /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

Et configurez les chemins pour chacun de mes noms de serveur:

$ nano /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf NomVirtualHost *: 8888  ServerName frontend.dev DocumentRoot / Applications / MAMP / htdocs / yiiplus / frontend / web /  # utilisez mod_rewrite pour la jolie prise en charge des URL RewriteEngine on # Si un répertoire ou un fichier existe, utilisez directement la demande RewriteCond% REQUEST_FILENAME! -f RewriteCond% REQUEST_FILENAME! -d # Sinon, transférez la demande à index.php RewriteRule. index.php # utilise index.php comme fichier d'index DirectoryIndex index.php #… d'autres paramètres…    ServerName backend.dev DocumentRoot / Applications / MAMP / htdocs / yiiplus / backend / web /  # utilisez mod_rewrite pour la jolie prise en charge des URL RewriteEngine on # Si un répertoire ou un fichier existe, utilisez directement la demande RewriteCond% REQUEST_FILENAME! -f RewriteCond% REQUEST_FILENAME! -d # Sinon, transférez la demande à index.php RewriteRule. index.php # utilise index.php comme fichier d'index DirectoryIndex index.php #… d'autres paramètres…  

Une fois cette opération terminée, voici à quoi ressemblera le site Web frontal à l'adresse http://frontend.dev:8888:

Le site back-end vous demandera de vous connecter, c'est pour les administrateurs:

Explorer la gestion des utilisateurs

Je vais maintenant vous expliquer les fonctions de base de la gestion des utilisateurs du modèle avancé. Mais nous devons d’abord nous assurer de recevoir les courriels de Yii dans notre environnement de développement..

Configuration de la livraison par courrier électronique

La gestion des utilisateurs envoie des e-mails pour les réinitialisations de mot de passe. Nous devons donc activer la configuration SMTP SwiftMailer de Yii. Je vais utiliser Mailtrap.io, que j'ai déjà exploré dans un précédent tutoriel, Introduction à Mailtrap: un faux serveur SMTP pour les tests de pré-production du courrier électronique d'une application..

Mailtrap fournit à votre équipe de développement un faux serveur SMTP pour tester, afficher et partager les courriels envoyés depuis les environnements de pré-production et pour tester avec des données réelles sans risque de spammer de vrais clients. Pour beaucoup de tâches de développement, utiliser Mailtrap sera gratuit.

Essentiellement, vous vous inscrivez à Mailtrap et envoyez tous les courriers électroniques de votre environnement de pré-production via votre faux serveur SMTP Mailtrap. Voici un bref aperçu vidéo de Mailtrap de Railsware:

Si vous suivez le tutoriel et créez un compte Mailtrap, vous verrez votre boîte de réception de démonstration:

De plus, lorsque vous cliquez sur l'icône Paramètres dans la liste de la boîte de réception, vous verrez que chaque boîte de réception Mailtrap possède ses propres informations d'identification du serveur SMTP:

Avec Yii, je mets à jour les paramètres SMTP de SwiftMailer dans /common/config/main-local.php. Voici à quoi cela peut ressembler:

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ common / mail', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' mailtrap.io ',' username '=>' 29xxxxxxxxxxxx72 ',' password '=>' 2c3xxxxxxxxx5 ',' port '=>' 2525 ',' encryption '=>' tls ', ],],

Notez que si vous ne personnalisez pas le viewPath comme indiqué ci-dessus, vous pouvez rencontrer un bogue concernant les fichiers de modèle de courrier électronique qui ne sont pas trouvés.

Inscription et inscription

Voici à quoi ressemble l’écran d’enregistrement frontal:

Il vous mènera à la page d'accueil dans l'état connecté:

Se connecter

Voici l'écran de connexion:

Mot de passe oublié

Et voici la Mot de passe oublié écran:

Si vous demandez un nouveau mot de passe, vous le trouverez dans Mailtrap:

Et après?

Vous voudrez peut-être consulter ma série Construire votre démarrage avec PHP, qui utilise le modèle avancé de Yii2. De plus, si vous souhaitez intégrer ce didacticiel à Yii2 User, consultez le guide d'intégration de Yii2 User avec le modèle avancé et l'authentification Google (à venir)..

J'espère que vous avez apprécié l'apprentissage du modèle d'application avancée Yii2. Je serais curieux d'entendre vos commentaires dans les commentaires sur si vous le préférez au modèle de base.

Surveillez les prochains tutoriels de ma série Programming With Yii2 pendant que je continue à plonger dans différents aspects du cadre. Je me félicite des demandes de fonctionnalités et de sujets. Vous pouvez les poster dans les commentaires ci-dessous ou m'envoyer un email sur mon site Lookahead Consulting.

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

  • Modèle avancé Yii2
  • Yii2 Developer Exchange
  • Une collection de scripts basés sur Yii sur CodeCanyon