Créer et exécuter un projet Yii 2 avec ServBay
Présentation : Qu’est-ce que Yii 2 ?
Yii 2 est un framework PHP performant et basé sur les composants, conçu pour le développement rapide d'applications Web modernes. Il suit le modèle de conception MVC (Modèle-Vue-Contrôleur) et propose un ensemble riche de fonctionnalités et d’outils pour aider les développeurs à créer des applications Web évolutives et de haute qualité. Grâce à ses performances élevées, son architecture flexible et ses puissantes fonctionnalités intégrées (comme la gestion du cache, la sécurité, le support de l’API RESTful, etc.), Yii 2 est largement plébiscité par la communauté.
Principales caractéristiques et avantages de Yii 2
- Haute performance : Yii 2 est finement optimisé pour traiter des requêtes à fort trafic, ce qui le rend idéal pour les applications sensibles aux performances.
- Modularité : Le framework est conçu de manière très modulaire, ce qui facilite l’organisation du code et la réutilisation des composants.
- Sécurité : De nombreuses fonctionnalités de sécurité sont intégrées, telles que la validation des entrées, le filtrage des sorties, la protection CSRF/XSS, ainsi qu’un système d’authentification et d’autorisation.
- Facilité d’utilisation : Une API claire, intuitive et une documentation exhaustive permettent de réduire la courbe d’apprentissage et de démarrer rapidement.
- Soutien communautaire fort : Une communauté de développeurs active et de nombreuses extensions tierces facilitent l’obtention d’aide et l’extension des fonctionnalités.
- Outils intégrés : Des outils en ligne de commande sont fournis pour la migration de base de données, la génération de code et d’autres tâches qui accroissent la productivité.
Yii 2 est donc un choix idéal pour développer des applications de niveau entreprise, des API RESTful, des portails 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 spécialement conçu pour macOS. Il intègre PHP, de multiples bases de données (telles que MySQL, PostgreSQL, MongoDB, Redis), des serveurs Web (Caddy, Nginx) et d’autres outils pour développeurs (Composer, Node.js, Python, Go, Java, etc.). L’objectif est d’offrir une plateforme de développement pratique et prête à l’emploi.
Ce guide vous accompagnera pour créer et exécuter une application Yii 2 de base en utilisant les éléments fournis par ServBay : environnement PHP, outil Composer, services de bases de données, et gestion des sites Web grâce à la fonctionnalité "Sites". Vous pourrez ainsi accéder à votre projet et en tester les fonctionnalités par étapes simples.
Prérequis
Avant de commencer, assurez-vous que vous avez :
- Installé et lancé ServBay avec succès sur macOS.
- Installé et activé la version requise de PHP dans ServBay (par exemple PHP 8.3 ou supérieur).
- Installé et activé les bases de données (MySQL ou PostgreSQL) et services de cache souhaités (Memcached et Redis) dans ServBay.
Vous pouvez consulter et gérer les paquets installés et l’état des services directement via l’interface principale de ServBay.
Création d’un projet Yii 2
TIP
ServBay recommande d’enregistrer vos projets dans le répertoire /Applications/ServBay/www
. Cela contribue à une structure de fichiers claire et facilite la gestion via la fonctionnalité “Sites“ de ServBay.
Composer : ServBay inclut déjà l’outil Composer — aucune installation supplémentaire n’est nécessaire. Vous pouvez exécuter la commande
composer
directement dans le terminal.Créer le dossier du projet : Ouvrez le terminal, rendez-vous dans le répertoire racine des sites ServBay, puis créez un dossier pour votre projet.
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Créer un projet Yii 2 avec Composer : Dans le dossier
servbay-yii2-app
, lancez la commande suivante pour créer un projet Yii 2 avec le template de base.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Cette commande télécharge le template d’application de base Yii 2 et toutes ses dépendances dans le dossier actuel (
.
). Veuillez patienter le temps de l’installation complète.Entrer dans le dossier projet : Vérifiez que votre terminal se trouve dans le dossier racine
/Applications/ServBay/www/servbay-yii2-app
, car les prochaines commandes s’y exécuteront.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Configuration initiale
Après la création du projet Yii 2, quelques réglages de base sont requis, notamment pour la connexion à la base de données et la configuration des composants.
Configurer la connexion à la base de données : Éditez le fichier
config/db.php
à la racine de votre projet. En fonction des services de base de données activés dans ServBay (MySQL ou PostgreSQL) et de leurs réglages (par défaut, l’utilisateur est souventroot
et le mot de passepassword
, sauf si vous l’avez modifié), mettez à jour les informations de connexion.Commencez par créer une nouvelle base de données (ex :
servbay_yii2_app
) dans le service base de données de ServBay. Pour cela, utilisez Adminer (inclus avec ServBay) ou tout autre outil de gestion (Sequel Ace, TablePlus, etc.). Adminer est accessible depuis la section Bases de données de 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éer 'username' => 'root', // Utilisateur base de données 'password' => 'password', // Mot de passe de la base 'charset' => 'utf8mb4', // Recommandé pour un jeu de caractères étendu ];
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, port selon config 'username' => 'root', // Utilisateur base de données 'password' => 'password', // Mot de passe 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // schéma PostgreSQL par défaut ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Modifiez le fichier
config/db.php
selon votre configuration.Configurer les composants de cache et Redis : Éditez le fichier
config/web.php
à la racine du projet. Modifiez la sectioncomponents
pour activer Memcached et Redis. Par défaut, Memcached écoute sur le port11211
et Redis sur6379
.php<?php // ... autres paramètres 'components' => [ // ... autres composants (request, cache, user, errorHandler, log, urlManager...) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Port Memcached par défaut 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Port Redis par défaut 'database' => 0, // Index 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
28Vérifiez que les services Memcached et Redis sont bien lancés dans ServBay. Pour exploiter Redis en tant que cache, le paquet
yiisoft/yii2-redis
doit être installé (composer require yiisoft/yii2-redis
si ce n'est pas encore fait). De même, Memcached utilise généralementyiisoft/yii2-memcached
. Le template de base inclut parfois ces dépendances.
Configurer le serveur Web (Sites ServBay)
Utilisez la fonctionnalité “Sites” de ServBay pour configurer le serveur Web local (Caddy ou Nginx) et l’associer à votre projet Yii 2.
- Ouvrir l’application ServBay : Démarrez ServBay.
- Aller dans la gestion des sites : Cliquez sur “Sites” (ou un intitulé équivalent).
- Ajouter un nouveau site : Cliquez sur le bouton d’ajout (généralement
+
ouAjouter
). - Renseigner les informations du site :
- Nom : Attribuez un nom facile à reconnaitre (par exemple :
My First Yii 2 Dev Site
). - Domaine : Indiquez le nom de domaine local à utiliser dans le navigateur, par ex.
servbay-yii2-test.local
. ServBay configure automatiquement le DNS pour pointer ce domaine sur127.0.0.1
. - Type de site : Choisissez
PHP
. - Version de PHP : Sélectionnez la version souhaitée (ex.
8.3
). Assurez-vous que cette version est installée et activée. - Répertoire racine du site : Étape essentielle : pour le template basique Yii 2, le point d’entrée public est le dossier
web
à la racine du projet. Spécifiez donc/Applications/ServBay/www/servbay-yii2-app/web
comme répertoire racine.
- Nom : Attribuez un nom facile à reconnaitre (par exemple :
- Enregistrer et appliquer : Validez votre configuration. ServBay rechargera automatiquement la configuration du serveur Web.
Pour un guide détaillé, consultez la documentation officielle de ServBay : Ajouter son premier site.
ServBay générera et fera confiance à un certificat SSL pour votre domaine local grâce à sa propre autorité de certification. Vous pourrez donc accéder à votre site en HTTPS.
Ajouter du code exemple pour des démonstrations
Pour illustrer l’utilisation de la base de données et du cache, ajoutez quelques méthodes de démonstration au contrôleur par défaut de Yii 2.
Éditez controllers/SiteController.php
et ajoutez les méthodes suivantes à la classe SiteController
:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Import de la classe d'exception de BDD
class SiteController extends Controller
{
/**
* Affiche la page d’accueil.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Exemple d’utilisation de Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Mise en cache pendant 60 secondes
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Échec d’écriture sur Memcached. Veuillez vérifier le service Memcached et sa configuration.");
}
}
/**
* Exemple d’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 set successfully. Retrieved value: " . $value);
} else {
return $this->asText("Échec d’écriture sur Redis. Veuillez vérifier le service Redis et sa configuration.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Erreur Redis : " . $e->getMessage() . ". Vérifiez le service Redis et la configuration.");
}
}
/**
* Exemple d’ajout d’un utilisateur en base de données.
* Nécessite l’existence d’une table 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // Peut aussi servir pour PostgreSQL avec la bonne configuration
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nom de démonstration lié à la marque
'email' => '[email protected]', // 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 en base. Erreur : " . $e->getMessage() . ". Veuillez vérifier le service BDD, la configuration, et la présence de la table 'users'.");
}
}
/**
* Exemple de sélection d’utilisateurs en base.
* Nécessite l’existence d’une table 'users'.
*
* @return Response
*/
public function actionMysql() // Peut aussi servir pour PostgreSQL avec la bonne configuration
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Sortie formatée pour éviter toute confusion ou fuite de champs sensibles
$output = "Utilisateurs extraits :\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 BDD, la configuration, et la présence de la table 'users'.");
}
}
// Si vous utilisez PostgreSQL, vous pouvez ajouter des méthodes spécifiques, mais db suffit en général
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatte la sortie 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;
}
/**
* Formatte la sortie en JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
Notez que dans actionMysqlAdd
et actionMysql
, une gestion des erreurs a été ajoutée et la sortie est plus claire. Les exemples de nom et d’e-mail sont également adaptés à l'image de marque ServBay.
Éditez le fichier de vue associé views/site/index.php
pour personnaliser ou conserver le contenu par défaut :
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // Mise à jour du titre
?>
<div class="site-index">
<div class="jumbotron">
<h1>Félicitations !</h1>
<p class="lead">Votre application Yii2 a été créée et configurée avec succès dans ServBay !</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Démarrez 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> (Nécessite la table 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Lister les utilisateurs en BDD</a> (Nécessite la table 'users')</li>
</ul>
<p>Veuillez vous assurer que Memcached, Redis et vos bases (MySQL/PostgreSQL) sont bien lancés dans ServBay et correctement configurés dans `config/web.php` et `config/db.php`.</p>
<p>Pour les exemples base de données, pensez à créer la table 'users' via une migration Yii (voir ci-dessous).</p>
</div>
</div>
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
Les liens sont ajoutés dans la vue pour accéder facilement aux actions de démonstration.
Base de données relationnelle : création de la structure (migrations)
Pour exécuter les exemples liés à la base de données (actionMysqlAdd
, actionMysql
), la table users
doit exister. Yii recommande de gérer le schéma avec le système de migration.
Créer un fichier de migration avec Gii : Dans le terminal, placez-vous dans
/Applications/ServBay/www/servbay-yii2-app
et créez le fichier :bashphp yii migrate/create create_users_table
1Confirmez avec
yes
. Un fichier PHP sera créé dans le dossiermigrations
, sous un nom du typemYYYYMMDD_HHMMSS_create_users_table.php
.Éditez le fichier migration : Ouvrez ce fichier et ajustez la méthode
up()
pour définir la structure de la tableusers
.php<?php use yii\db\Migration; /** * Création de la table `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX est le timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Utilise {{%users}} pour le support du préfixe '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'), ]); // Optionnel : créer un index pour accélérer les recherches $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true = index unique ); } /** * {@inheritdoc} */ public function down() { // Supprime l’index $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Supprime 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 de fichier réel.Lancer la migration : Dans le terminal, depuis le dossier racine du projet, exécutez :
bashphp yii migrate
1Confirmez avec
yes
. Le script créera la table conformément à la définition.
Accéder au site et tester
Vous pouvez maintenant accéder via le navigateur au domaine configuré, par exemple : https://servbay-yii2-test.local
.
- Accédez à
https://servbay-yii2-test.local
: la page d’accueil du template s’affiche, ainsi que les liens de démonstration ajoutés dansviews/site/index.php
. - Cliquez sur "Tester Memcached" ou rendez-vous sur
https://servbay-yii2-test.local/index.php?r=site/memcached
: si le service fonctionne, le message “Memcached set successfully...” doit s’afficher. - Cliquez sur "Tester Redis" ou sur
https://servbay-yii2-test.local/index.php?r=site/redis
: si la configuration est bonne, vous verrez “Redis set successfully...”. - Cliquez sur "Ajouter un utilisateur en BDD" ou sur
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: la base doit être active, la tableusers
présente et la sortie “Utilisateur ajouté avec succès...” apparaît. Chaque visite tente l’ajout d’un nouvel utilisateur (en tenant compte de l’unicité de l’e-mail). - Cliquez sur "Lister les utilisateurs en BDD" ou sur
https://servbay-yii2-test.local/index.php?r=site/mysql
: la liste des utilisateurs de la tableusers
s’affiche si tout fonctionne.
En cas de souci, vérifiez si les services correspondants (PHP, serveur Web, base, Memcached, Redis) sont bien actifs dans ServBay, contrôlez la configuration (config/db.php
, config/web.php
), et la création des tables.
FAQ : Questions fréquentes
- Pourquoi le domaine n’est-il pas accessible ou y a-t-il une erreur de certificat ? Vérifiez que le domaine a bien été ajouté en tant que site dans ServBay et que l’application tourne. ServBay gère automatiquement le DNS ainsi que les certificats SSL locaux. Si une erreur de certificat survient, assurez-vous d’avoir approuvé l’autorité ServBay User CA ou ServBay Public CA (voir la documentation).
- Impossible d’utiliser Composer ? Assurez-vous que Composer est activé dans ServBay et que les commandes sont tapées dans le terminal macOS. ServBay ajoute Composer à votre PATH automatiquement.
- Problème de connexion à la base de données ? Vérifiez que le service (MySQL ou PostgreSQL) tourne. Vérifiez également la correspondance des paramètres
dsn
,username
,password
dansconfig/db.php
par rapport à la configuration de ServBay. Assurez-vous que la baseservbay_yii2_app
a bien été créée. Le client Adminer de ServBay permet de vérifier. - Erreur de connexion Memcached/Redis ? Vérifiez que Memcached/Redis sont lancés dans ServBay et que l’hôte et le port renseignés dans
config/web.php
sont corrects (par défaut127.0.0.1
et le port du service). - La migration avec
php yii migrate
échoue ? Contrôlez la configuration du fichierconfig/db.php
, la présence de la base de données, et que le service est actif : la migration nécessite la connexion. - Pourquoi une erreur “table inexistante” pour
actionMysqlAdd
/actionMysql
? La tableusers
doit être créée préalablement via la commande de migrationphp yii migrate
. - Où trouver les logs d’erreur PHP ? ServBay centralise les logs PHP, du serveur Web, etc. Ils sont consultables dans l’onglet “Logs” de l’interface, facilitant ainsi le diagnostic.
Conclusion
Grâce à ServBay, vous pouvez facilement disposer d’un environnement de développement local puissant sous macOS pour vos projets Yii 2. ServBay, avec Composer préinstallé, la gestion avancée des versions PHP, ses bases de données et caches embarqués et une configuration de site simplifiée, rend le développement Yii 2 rapide et accessible. En suivant ce guide, vous pourrez lancer votre projet Yii 2 en quelques étapes et profiter d’outils performants pour gagner en efficacité.
Bon développement !