Création et exécution d'un projet Zend Framework
Qu'est-ce que Zend Framework?
Zend Framework est un framework PHP open source qui propose une bibliothèque orientée objet pour construire des applications web et des services modernes. Il est connu pour son architecture modulaire et ses performances élevées, convenant aussi bien aux petites qu'aux grandes applications d'entreprise.
Caractéristiques et avantages principaux de Zend Framework
- Design modulaire : Zend Framework utilise un design modulaire permettant aux développeurs de choisir et d'utiliser des composants selon leurs besoins.
- Haute performance : Grâce à une architecture optimisée et des mécanismes de mise en cache, Zend Framework offre des performances exceptionnelles.
- Flexibilité : Peut intégrer divers bibliothèques et extensions tierces, adaptés à des projets de toute taille.
- Support communautaire : Dispose d'une vaste communauté de développeurs et d'un écosystème riche.
- Documentation excellente : Fournit une documentation détaillée et des tutoriels pour aider les développeurs à démarrer rapidement.
Zend Framework convient à la construction d'applications web et d'API de haute qualité, adaptées à des projets allant des petites applications aux grands systèmes d'entreprise.
Utilisation de ServBay pour créer et exécuter un projet Zend Framework
Dans cet article, nous utiliserons l'environnement PHP proposé par ServBay pour créer et exécuter un projet Zend Framework. Nous utiliserons la fonctionnalité « Hôte » de ServBay pour configurer le serveur web et accéder au projet grâce à une configuration simple.
Note : Si vous êtes un utilisateur de NGINX ou Apache
ServBay utilise par défaut Caddy comme serveur web. Pour les utilisateurs migrant de NGINX et Apache à ServBay, quelques points clés nécessitent une attention particulière :
Configuration de Caddy
ServBay intègre déjà Caddy, avec une configuration optimisée et déboguée par défaut. Les développeurs n'ont qu'à utiliser la fonctionnalité « Hôte » de ServBay pour gérer le site, sans avoir besoin de modifier manuellement les fichiers de configuration de Caddy.
Règles de réécriture et .htaccess
Avec NGINX et Apache, les développeurs doivent souvent écrire eux-mêmes les règles de réécriture et les fichiers .htaccess pour la gestion des URLs et autres configurations. ServBay a déjà configuré les règles Caddy par défaut, donc à moins de besoins spécifiques, il n'est pas nécessaire de rédiger ces règles.
En savoir plus
Pour plus d'informations, consultez Réécriture et htaccess, Comment migrer un site Apache vers ServBay et Comment migrer un site NGINX vers ServBay.
Création d'un projet Zend Framework
TIP
ServBay recommande aux développeurs de placer le site web dans le répertoire /Applications/ServBay/www
pour une gestion facilitée.
Installation de Composer
ServBay inclut déjà Composer, donc son installation n'est pas nécessaire.
Créer un projet Zend Framework
Utilisez Composer pour créer un nouveau projet Zend Framework :
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4Entrer dans le répertoire du projet
Entrez dans le répertoire nouvellement créé du projet Zend Framework :
bashcd /Applications/ServBay/www/servbay-zend-app
1
Configuration initiale
Configurer les variables d'environnement
Configurez les informations de connexion à la base de données et autres variables d'environnement dans le fichier
config/autoload/global.php
. Assurez-vous que les configurations suivantes sont correctement définies :phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9
Configuration du serveur web
Utilisez la fonctionnalité « Hôte » de ServBay pour accéder au projet Zend Framework via le serveur web. Dans les paramètres de l'hôte de ServBay, ajoutez un nouvel hôte :
- Nom :
My First Zend Dev Site
- Domaine :
servbay-zend-test.local
- Type de site :
PHP
- Version PHP : sélectionnez
8.3
- Répertoire racine du site :
/Applications/ServBay/www/servbay-zend-app/public
Pour des étapes détaillées, consultez Ajouter le premier site web.
Ajout de code exemple
Ajoutez le code suivant dans le fichier module/Application/config/module.config.php
pour afficher "Hello ServBay!":
return [
'router' => [
'routes' => [
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
'Application\Controller\Index' => InvokableFactory::class,
],
],
'view_manager' => [
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
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
Ajoutez le code suivant dans le fichier module/Application/src/Controller/IndexController.php
:
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel([
'message' => 'Hello ServBay!',
]);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Ajoutez le code suivant dans le fichier module/Application/view/application/index/index.phtml
:
<?php echo $this->message; ?>
Accéder au site web
Ouvrez un navigateur et accédez à https://servbay-zend-test.local
, vous devriez voir la page affichant Hello ServBay!
.
Exemple de base de données NoSQL
Exemple Memcached
Installer l'extension Memcached
L'extension Memcached est déjà préinstallée dans ServBay, il n'est donc pas nécessaire de l'installer.
Configurer Memcached
Ajoutez la dépendance Memcached dans le fichier
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5Ensuite, exécutez
composer update
pour installer la dépendance.Configurer les routes
Ajoutez le code suivant dans le fichier
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'memcached' => [ 'type' => 'Literal', 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'memcached', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Utiliser Memcached
Utilisez le cache dans le contrôleur :
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function memcachedAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached!'; $cache->setItem($cacheKey, $cachedData); } return new ViewModel([ 'message' => $cachedData, ]); } }
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
34Ajoutez le code suivant dans le fichier
module/Application/view/application/index/memcached.phtml
:php<?php echo $this->message; ?>
1Ouvrez un navigateur et accédez à
https://servbay-zend-test.local/memcached
Exemple Redis
Installer l'extension Redis
L'extension Redis est déjà préinstallée dans ServBay, il n'est donc pas nécessaire de l'installer.
Configurer Redis
Ajoutez la dépendance Redis dans le fichier
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5Ensuite, exécutez
composer update
pour installer la dépendance.Configurer les routes
Ajoutez le code suivant dans le fichier
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'redis' => [ 'type' => 'Literal', 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'redis', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Utiliser Redis
Utilisez le cache dans le contrôleur :
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function redisAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis!'; $cache->setItem($cacheKey, $cachedData); } return new ViewModel([ 'message' => $cachedData, ]); } }
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
35Ajoutez le code suivant dans le fichier
module/Application/view/application/index/redis.phtml
:php<?php echo $this->message; ?>
1Ouvrez un navigateur et accédez à
https://servbay-zend-test.local/redis
Exemple de base de données relationnelle
Créer la structure de la base de données et les fichiers de migration
Créer les fichiers de migration
Utilisez l'outil de migrations de Laminas pour créer les fichiers de migration :
bashcomposer require laminas/laminas-db
1Éditer les fichiers de migration
Créez un nouveau fichier de migration dans le répertoire
data/migrations
et éditez-le pour définir la structure de la table de la base de données :phpuse Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class CreateUsersTable { public function up(Adapter $adapter) { $sql = new Sql($adapter); $create = $sql->createTable('users') ->addColumn('id', 'integer', ['auto_increment' => true]) ->addColumn('name', 'varchar', ['length' => 255]) ->addColumn('email', 'varchar', ['length' => 255, 'unique' => true]) ->addPrimaryKey('id'); $adapter->query( $sql->buildSqlString($create), Adapter::QUERY_MODE_EXECUTE ); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Exécuter la migration
Exécutez manuellement la migration pour créer la table de la base de données :
php$adapter = new Adapter([ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ]); $migration = new CreateUsersTable(); $migration->up($adapter);
1
2
3
4
5
6
7
8
9
10
Exemple MySQL
Configurer MySQL
Configurez les informations de connexion MySQL dans le fichier
config/autoload/global.php
:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Configurer les routes
Ajoutez le code suivant dans le fichier
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'mysql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysql', ], ], ], ], ], ];
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
26Insérer des données utilisateurs
Insérez des données utilisateurs dans le contrôleur :
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result as $row) { $users[] = $row; } return new ViewModel([ 'users' => json_encode($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
46
47
48
49
50
51
52
53
54
55Ajoutez le code suivant dans le fichier
module/Application/view/application/index/mysql-add.phtml
:php<?php echo $this->message; ?>
1Ajoutez le code suivant dans le fichier
module/Application/view/application/index/mysql.phtml
:php<?php echo $this->users; ?>
1Ouvrez un navigateur et accédez à
https://servbay-zend-test.local/mysql-add
ethttps://servbay-zend-test.local/mysql
Exemple PostgreSQL
Configurer PostgreSQL
Configurez les informations de connexion PostgreSQL dans le fichier
config/autoload/global.php
:phpreturn [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Configurer les routes
Ajoutez le code suivant dans le fichier
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'pgsql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsql', ], ], ], ], ], ];
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
26Insérer des données utilisateurs
Insérez des données utilisateurs dans le contrôleur :
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function pgsqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select),
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