Démarrer avec zend-framework2

Un simple Hello World

Dans votre ligne de commande, allez dans le répertoire dans lequel vous voulez créer le projet, puis tapez : composer create-project zendframework/skeleton-application helloWorldTest. Lors de l’installation, il vous sera demandé si vous souhaitez une installation minimale : Disons que oui pour le moment, nous ne faisons que tester.

Par souci de simplicité, nous utiliserons le serveur PHP CLI intégré. Depuis la ligne de commande, placez-vous dans le répertoire racine de votre projet (helloWorldTest), puis exécutez : php -S 0.0.0.0:8080 -t public/ public/index.php. Maintenant, ouvrez votre navigateur Web et accédez à http://localhost/, vous devriez voir la page d’accueil de l’application ZF2 Skeleton.

Si vous le faites, nous allons maintenant configurer une nouvelle page. Dans module/Application/config/module.config.php, vous pouvez voir qu’une route dynamique est déjà configurée pour le sous-dossier de l’application :

return [
    'router' => [
        'routes' => [
            'home' => [
                ...
            ],
            'application' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/application[/:action]',
                    'defaults' => [
                        'controller'    => Controller\IndexController::class,
                        'action'        => 'index',
                    ],
                ],
            ],
        ],
    ],

Définissez une nouvelle action “helloWorldAction()” dans module/Application/src/Controller/IndexController.php :

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        ...
    }
    
    public function helloWorldAction()
    {
        return new ViewModel();
    }
}

Enfin, créez le fichier de vue module/Application/view/application/index/hello-world.phtml avec le contenu suivant :

<?php
echo "Hello World !";

Maintenant, allez sur http://localhost/application/hello-world, et dites bonjour à ZF2 !

Installation ou configuration

Instructions détaillées pour configurer ou installer Zend Framework 2. Il existe différentes manières d’installer le framework. Voici quelques-uns d’entre eux :

Utilisation de Composer - Méthode recommandée

En supposant que composer est [installé] [1] sur la boîte cible.

Pour installer une application squelette MVC, exécutez-la dans votre terminal pour créer un nouveau projet zend framework 2 à l’emplacement spécifié :

php composer.phar create-project -sdev \
    --repository-url="https://packages.zendframework.com" \
    zendframework/skeleton-application path/to/install

pour installer manuellement un ZF2 minimal (Zend MVC + sa poignée de dépendances), exécutez dans votre ligne de commande :

composer require zendframework/zend-mvc

ou pour un ZF2 à part entièred (+64 modules) :

composer require zendframework/zendframework`

Veuillez noter que la première option exécute un programme d’installation qui vous fournira une application entièrement fonctionnelle avec la structure habituelle des répertoires d’applications. D’autres options vous permettront de créer l’ensemble de l’application à partir de zéro car elle fournit simplement des modules ZF2 sur lesquels s’appuyer.

Utilisation des sous-modules Git

Exécutez la commande ci-dessous pour cloner zf2 et ses dépendances de manière récursive à partir de Github :

git clone git://github.com/zendframework/ZendSkeletonApplication.git --recursive

Configuration du serveur HTTP

Une application Web typique nécessite l’exécution d’un service HTTP écoutant un port dédié (généralement : 80) pour transmettre les demandes entrantes à l’application, traiter et renvoyer la sortie (réponse).

Remarque : Vous pouvez également écrire des applications compatibles avec la console dans Zend Framework 2 sans avoir besoin d’un serveur HTTP.

OPTION 1 - Serveur CLI PHP

La façon la plus simple de démarrer si vous utilisez PHP 5.4 ou supérieur est de démarrer le cli-serveur PHP interne dans le répertoire racine.

Accédez au répertoire du projet et exécutez :

php -S 0.0.0.0:8080 -t public/ public/index.php`.

Cela démarrera le serveur cli intégré sur le port 8080 et le liera à toutes les interfaces réseau.

OPTION 2 - Un serveur HTTP personnalisé

Configurez un hôte virtuel sur Apache ou Microsoft IIS Server ou Nginx et transmettez les requêtes HTTP entrantes à l’application.

[1] : https://getcomposer.org/download/

Comment créer une usine

Lorsqu’une classe doit être fournie avec des dépendances matérielles, la meilleure pratique consiste à utiliser un modèle d’injection de constructeur dans lequel ces dépendances sont injectées à l’aide d’une usine.

Supposons que MyClass dépend fortement d’une valeur $dependency qui doit être résolue à partir de la configuration de l’application.

<?php
namespace Application\Folder;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyClass
{
    protected $dependency;

    public function __construct($dependency)
    { 
        $this->dependency = $dependency;
    }
}

Pour injecter cette dépendance, une classe de fabrique est créée. Cette fabrique résoudra la dépendance de la configuration et injectera la valeur de configuration lors de la construction de la classe et renverra le résultat :

<?php
namespace Application\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyClassFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    { 
        $config = $servicelocator->get('Config');
        $dependency = $config['dependency'];
        $myClass = new MyClass($dependency);
        return $myClass;
    }
}

Maintenant que la classe d’usine a été créée, elle doit être enregistrée dans la configuration du gestionnaire de services dans le fichier de configuration du module “module.config.php” sous les usines clés. Il est recommandé d’utiliser les mêmes noms pour la classe et la fabrique afin de les retrouver facilement dans l’arborescence des dossiers du projet :

<?php

namespace Application;

return array(
    //...
    'service_manager' => [
        'factories' => [
            'Application\Folder\MyClass' => 'Application\Factory\MyClassFactory'
        ]
    ],
    //...
);

Alternativement, les constantes de nom de classe peuvent être utilisées pour les enregistrer :

<?php

namespace Application;

use Application\Folder\MyClass;
use Application\Factory\MyClassFactory;

return array(
    //...
    'service_manager' => [
        'factories' => [
            MyClass::class => MyClassFactory::class'
        ]
    ],
    //...
);

Maintenant, la classe peut être récupérée auprès du gestionnaire de service à l’aide de la clé que nous avons utilisée lors de l’enregistrement de la fabrique pour cette classe :

 $serviceManager->get('Application\Folder\MyClass');

ou

 $serviceManager->get(MyClass::class);

Le gestionnaire de service trouvera, collectera et exécutera la fabrique, puis il retournera votre instance de classe avec la dépendance injectée.