Créer et exécuter un projet Yii 2 dans ServBay
Présentation : Qu’est-ce que Yii 2 ?
Yii 2 est un framework PHP performant et basé sur des composants, conçu pour développer rapidement des applications Web modernes. Il suit le modèle de conception MVC (Modèle-Vue-Contrôleur) et offre une gamme complète de fonctionnalités et d’outils qui permettent aux développeurs de construire efficacement des applications Web évolutives et de haute qualité. Grâce à ses excellentes performances, son architecture flexible et ses fonctionnalités natives avancées (caching, sécurité, support du développement API RESTful, etc.), Yii 2 est largement plébiscité.
Principales caractéristiques et avantages de Yii 2
- Performance élevée : Yii 2 est spécialement optimisé pour gérer de nombreuses requêtes simultanées et convient parfaitement aux applications sensibles aux performances.
- Modularité : Sa conception modulaire facilite l’organisation du code et la réutilisation des composants.
- Sécurité renforcée : Fonctionnalités intégrées telles que la validation des entrées, le filtrage des sorties, la protection CSRF/XSS, la gestion de l’authentification et des permissions.
- Simplicité d’utilisation : API claire et intuitive, documentation exhaustive, prise en main facilitée.
- Communauté active : Grâce à une large communauté de développeurs, il existe de nombreuses extensions tierces et une aide facilement accessible.
- Outils intégrés : Outils en ligne de commande pour les migrations de base de données, la génération de code, etc., afin d’accroître la productivité.
Yii 2 est le choix idéal pour créer des applications d’entreprise, des API RESTful, des portails web et bien d’autres types de projets web.
Exécuter un projet Yii 2 avec ServBay
ServBay est un environnement de développement Web local conçu pour macOS et Windows. Il offre une intégration de PHP, de nombreuses bases de données (MySQL, PostgreSQL, MongoDB, Redis), des serveurs Web (Caddy, Nginx) ainsi que d’autres outils essentiels au développeur (Composer, Node.js, Python, Go, Java, etc.), pour obtenir une plateforme de développement pratique "prête à l'emploi".
Ce guide vous accompagne dans la création et l’exécution d’une application Yii 2 en utilisant l’environnement PHP, les outils Composer et les services de base de données offerts par ServBay. Nous utiliserons la fonction "Sites" de ServBay pour configurer le serveur Web local et accéder à votre projet rapidement.
Prérequis
Avant de commencer, assurez-vous d’avoir :
- Installé et lancé ServBay avec succès sur macOS ou Windows.
- Installé et activé la version de PHP requise dans ServBay (par exemple PHP 8.3 ou supérieure).
- Installé et activé le service de base de données que vous souhaitez utiliser (MySQL ou PostgreSQL), ainsi que les solutions de cache (Memcached et Redis).
Dans l’interface principale de ServBay, vous pouvez consulter et gérer les paquets installés ainsi que leur statut.
Créer un projet Yii 2
TIP
ServBay recommande de placer vos fichiers de projet dans les répertoires suivants. Cela assure une structure de fichiers ordonnée et facilite la gestion via la fonction "Sites" de ServBay :
- macOS :
/Applications/ServBay/www
- Windows :
C:\ServBay\www
Composer : ServBay intègre déjà Composer, inutile de l’installer séparément. Vous pouvez utiliser directement la commande
composer
dans le terminal.Créer le répertoire du projet : Ouvrez le terminal, accédez au répertoire racine des sites ServBay et créez un nouveau dossier de projet.
macOS :
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows :
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Créer le projet avec Composer : Dans
servbay-yii2-app
, lancez la commande Composer pour générer le modèle d’application Yii 2 de base.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Cette commande télécharge le template de base de Yii 2 et toutes ses dépendances dans le répertoire courant (
.
). Patientez jusqu’à la fin du téléchargement et de l’installation.Entrer dans le dossier du projet : Assurez-vous que le terminal est bien dans le dossier racine du projet. Les étapes suivantes seront exécutées depuis ce dossier.
macOS :
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows :
cmdcd C:\ServBay\www\servbay-yii2-app
1
Configuration initiale
Après la création du projet Yii 2, quelques réglages essentiels sont requis, notamment pour la connexion à la base de données et la configuration des composants.
Configurer la connexion à la base de données : Modifiez le fichier
config/db.php
à la racine du projet. Adaptez les informations de connexion selon le service de base de données utilisé (MySQL ou PostgreSQL), en tenant compte des identifiants (par défaut, l’utilisateur est généralementroot
et le mot de passepassword
, sauf modification).Il faut d’abord créer une nouvelle base de données dans ServBay, exemple :
servbay_yii2_app
. Utilisez l’outil Adminer intégré, ou votre client préféré (Sequel Ace, TablePlus, etc.), accessible via l’interface ServBay.Pour MySQL :
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname : nom de la base créée 'username' => 'root', // utilisateur de la base 'password' => 'password', // mot de passe de la base 'charset' => 'utf8mb4', // utf8mb4 pour un meilleur support des jeux de caractères ];
1
2
3
4
5
6
7
8
9Pour PostgreSQL :
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname : nom de la base, port souvent 5432 'username' => 'root', // utilisateur de la base 'password' => 'password', // mot de passe de la base 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // schema par défaut PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Choisissez et ajustez
config/db.php
selon votre configuration.Configurer les composants de cache et Redis : Modifiez le fichier
config/web.php
à la racine du projet. Ajoutez ou adaptez la sectioncomponents
pour la configuration de Memcached et Redis. Les ports par défaut sont Memcached :11211
et Redis :6379
.php<?php // ... autres paramètres 'components' => [ // ... autres composants déjà présents (request, cache, user, errorHandler, log, urlManager...) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // port par défaut Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // port par défaut Redis 'database' => 0, // indice de base Redis ], // ... autres composants ], // ... autres paramètres
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28Assurez-vous d’avoir démarré les services Memcached et Redis dans ServBay. L’utilisation de Redis comme cache nécessite le package
yiisoft/yii2-redis
(généralement installé lors ducreate-project
, sinon installez-le aveccomposer require yiisoft/yii2-redis
). Pour Memcached, le package utilisé est typiquementyiisoft/yii2-memcached
. Le template de base inclut souvent ces dépendances.
Configurer le serveur Web (Sites ServBay)
Utilisez la fonction "Sites" de ServBay pour configurer le serveur Web local (Caddy ou Nginx) vers votre projet Yii 2.
- Ouvrir ServBay : Lancez l’application ServBay.
- Accéder aux paramètres de sites : Recherchez et cliquez sur "Sites" ou l’onglet équivalent.
- Ajouter un nouveau site : Cliquez sur le bouton d’ajout (signe
+
ou "Ajouter"). - Saisir les informations du site :
- Nom : Un nom reconnaissable, exemple
My First Yii 2 Dev Site
. - Domaine : Le domaine local pour le navigateur, exemple
servbay-yii2-test.local
. ServBay configure le DNS local en redirigeant ce nom vers127.0.0.1
. - Type de site : Sélectionner
PHP
. - Version de PHP : Choisissez la version souhaitée (ex.
8.3
). Vérifiez qu’elle est installée et activée dans ServBay. - Répertoire racine du site : Étape cruciale. Pour le template de base de Yii 2, le point d’entrée public est le dossier
web
à la racine du projet. Donc, indiquez comme chemin :- macOS :
/Applications/ServBay/www/servbay-yii2-app/web
- Windows :
C:\ServBay\www\servbay-yii2-app\web
- macOS :
- Nom : Un nom reconnaissable, exemple
- Enregistrer et appliquer : Sauvegardez la configuration. ServBay recharge automatiquement la configuration du serveur Web.
Consultez la documentation officielle ServBay pour des instructions détaillées : Ajouter votre premier site.
ServBay délivre et approuve automatiquement des certificats SSL (via ServBay User CA ou ServBay Public CA), de sorte que vous pouvez accéder à votre site en HTTPS.
Ajouter du code exemple pour la démonstration
Pour illustrer l’utilisation de la base de données et du cache, ajoutez des actions de démonstration dans le contrôleur par défaut de Yii 2.
Modifiez le fichier controllers/SiteController.php
à la racine du projet, et ajoutez les méthodes suivantes à la classe SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importer la classe d’exception de base de données
class SiteController extends Controller
{
/**
* Affiche la page d’accueil.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Démonstration de l’utilisation de Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache pendant 60 secondes
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached enregistré avec succès. Valeur récupérée : " . $value);
} else {
return $this->asText("Échec de l’enregistrement dans Memcached. Veuillez vérifier le service et la configuration de Memcached.");
}
}
/**
* Démonstration de l’utilisation de Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis enregistré avec succès. Valeur récupérée : " . $value);
} else {
return $this->asText("Échec de l’enregistrement dans Redis. Veuillez vérifier le service et la configuration de Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Erreur Redis : " . $e->getMessage() . ". Veuillez vérifier le service et la configuration de Redis.");
}
}
/**
* Démonstration de l’ajout d’un utilisateur dans la base.
* Supposé qu’une table 'users' existe.
*
* @return Response
*/
public function actionMysqlAdd() // Fonctionne aussi avec PostgreSQL si configuré
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nom de démo lié à la marque
'email' => 'demo-user@servbay.test', // Email de démo lié à la marque
])->execute();
return $this->asText("Utilisateur ajouté avec succès. Lignes affectées : " . $count);
} catch (DbException $e) {
return $this->asText("Échec de l’ajout de l’utilisateur. Erreur : " . $e->getMessage() . ". Vérifiez le service de base de données, la configuration et l’existence de la table 'users'.");
}
}
/**
* Démonstration de la récupération des utilisateurs depuis la base.
* Supposé qu’une table 'users' existe.
*
* @return Response
*/
public function actionMysql() // Fonctionne aussi avec PostgreSQL si configuré
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formatage du rendu pour éviter la confusion ou le retour de données sensibles
$output = "Utilisateurs récupérés :\n";
foreach ($users as $user) {
$output .= "- ID : {$user['id']}, Nom : {$user['name']}, Email : {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Échec de la récupération des utilisateurs. Erreur : " . $e->getMessage() . ". Vérifiez le service de base de données, la configuration et l’existence de la table 'users'.");
}
}
// Si vous utilisez PostgreSQL, vous pouvez ajouter des actions dédiées, mais le composant db suffit généralement
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatage d’une réponse en texte brut.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Formatage d’une réponse en JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Dans actionMysqlAdd
et actionMysql
, la gestion des erreurs et le format de sortie ont été améliorés pour plus de clarté. Les noms et emails d’exemple sont adaptés à la marque ServBay.
Modifiez le fichier views/site/index.php
à la racine du projet, correspondant à la vue pour actionIndex
. Vous pouvez conserver le contenu par défaut ou le personnaliser :
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'Mon application Yii2 sur ServBay'; // Titre mis à jour
?>
<div class="site-index">
<div class="jumbotron">
<h1>Félicitations !</h1>
<p class="lead">Vous avez créé avec succès votre application Yii2 et l’avez configurée avec ServBay !</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Commencer avec Yii</a></p>
</div>
<div class="body-content">
<h2>Démonstrations</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Tester Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Tester Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Ajouter un utilisateur en BDD</a> (Requiert la table 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Lister les utilisateurs en BDD</a> (Requiert la table 'users')</li>
</ul>
<p>Veuillez vous assurer que les services Memcached, Redis et votre base de données (MySQL/PostgreSQL) sont actifs dans ServBay et configurés correctement dans `config/web.php` et `config/db.php`.</p>
<p>Pour les exemples liés à la base, créez auparavant la table 'users' avec les migrations Yii (voir ci-dessous).</p>
</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Des liens ont été ajoutés pour faciliter le test des nouvelles actions du contrôleur.
Base de données relationnelle : créer la structure de la table (migration)
Pour utiliser les exemples liés à la base (actionMysqlAdd
, actionMysql
), il faut créer la table users
. Yii recommande la gestion des modifications du schéma via les migrations.
Créer un fichier de migration avec Gii : Ouvrez le terminal dans le dossier racine du projet, puis lancez la commande suivante pour générer une migration.
Chemins racine :
- macOS :
/Applications/ServBay/www/servbay-yii2-app
- Windows :
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Confirmez avec
yes
. Un fichier PHP est alors généré dans le dossiermigrations
, du typemYYYYMMDD_HHMMSS_create_users_table.php
.- macOS :
Modifier le fichier de migration : Ouvrez le fichier créé et complétez la méthode
up()
pour définir la structure de la tableusers
.php<?php use yii\db\Migration; /** * Gère la création de la table `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX : timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // {{%users}} pour le préfixe si configuré 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Option : créer un index pour accélérer les requêtes $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // unique ); } /** * {@inheritdoc} */ public function down() { // Supprimer l’index $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Supprimer la table $this->dropTable('{{%users}}'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46Remplacez
mXXXXXXXXXXXXXX_create_users_table
par le nom réel généré.Exécuter la migration : Depuis le terminal, dans le dossier racine du projet, appliquez la migration pour créer la table selon le schéma défini.
bashphp yii migrate
1Confirmez avec
yes
. Si tout est correct, la création de la table sera confirmée.
Accéder au site et tester
Ouvrez votre navigateur et accédez au domaine configuré : https://servbay-yii2-test.local
.
- Allez sur
https://servbay-yii2-test.local
: La page d’accueil standard du template Yii 2 s’affiche, avec des liens de démonstration. - Cliquez sur "Tester Memcached" ou accédez à
https://servbay-yii2-test.local/index.php?r=site/memcached
: Si le service Memcached fonctionne et est bien configuré, vous verrez le message "Memcached enregistré avec succès...". - Cliquez sur "Tester Redis" ou accédez à
https://servbay-yii2-test.local/index.php?r=site/redis
: Si le service Redis fonctionne et est bien configuré, le message "Redis enregistré avec succès..." s’affichera. - Cliquez sur "Ajouter un utilisateur en BDD" ou accédez à
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: Si la base fonctionne, la configuration est correcte et la tableusers
créée, vous recevrez le texte "Utilisateur ajouté avec succès...". Chaque clic tente d’ajouter un nouvel utilisateur (l’e-mail doit être unique s’il existe déjà). - Cliquez sur "Lister les utilisateurs en BDD" ou accédez à
https://servbay-yii2-test.local/index.php?r=site/mysql
: Si la base fonctionne et la table existe, la liste des utilisateurs présents s’affichera.
En cas de problème, vérifiez que tous les services nécessaires (PHP, serveur Web, base de données, Memcached, Redis) dans ServBay sont actifs, que votre configuration Yii 2 (config/db.php
, config/web.php
) est correcte et que la table de base a bien été créée.
FAQ
- Pourquoi "Ce site est inaccessible" ou erreur de certificat ? Vérifiez que le domaine est correctement ajouté dans les paramètres "Sites" de ServBay et que l’application ServBay fonctionne. ServBay gère automatiquement le DNS local et les certificats SSL. Pour les erreurs de certificat, assurez-vous d’avoir approuvé ServBay User CA ou ServBay Public CA, voir la documentation dédiée.
- La commande Composer ne fonctionne pas ? Assurez-vous d’avoir activé le package Composer dans ServBay et que vous utilisez le terminal sur macOS. ServBay ajoute Composer à votre PATH automatiquement.
- Échec de la connexion à la base de données ? Vérifiez que le service de base (MySQL/PostgreSQL) est bien actif dans ServBay. Assurez-vous que le dsn, l’utilisateur, le mot de passe de
config/db.php
correspondent à la configuration ServBay. Créez la baseservbay_yii2_app
si ce n’est déjà fait. Adminer intégré permet de tester la connexion et de visualiser les bases. - Échec de la connexion à Memcached/Redis ? Vérifiez que les services Memcached/Redis sont démarrés. Vérifiez l’hôte et le port dans
config/web.php
(par défaut127.0.0.1
+ port). - Échec de la migration de base (
php yii migrate
) ? Assurez-vous d’avoir correctement configuréconfig/db.php
, que le service de base est actif et la base créée. La migration nécessite une connexion fonctionnelle à la base. - Pourquoi
actionMysqlAdd
/actionMysql
indique que la table n’existe pas ? Exécutez d’abord la migration de base de données avecphp yii migrate
pour créer la table 'users'. - Où trouver les logs d’erreur PHP ? ServBay centralise les logs PHP et serveur web. Consultez la section "Logs" dans l’application ServBay pour accéder aux journaux et faciliter le diagnostic.
Conclusion
Avec ServBay, mettre en place un environnement de développement local complet et performant pour Yii 2 sous macOS et Windows devient simple et rapide. Composer préinstallé, gestion avancée des versions de PHP, bases et caches intégrés, configuration facilitée des sites… tout est conçu pour accélérer la création et le développement de projets Yii 2. Suivez ce guide pour démarrer votre aventure Yii 2 en toute confiance — ServBay vous apporte flexibilité et efficacité.
Bon développement !