Quick start avec la console

Note

Si vous n’aimez pas le mode console, vous pouvez passer au quick-start avec les webtools (UbiquityMyAdmin).

Composer installation

ubiquity utilise Composer pour gérer ses dépendances. Vous devrez donc vous assurer que vous avez Composer installé sur votre machine.

Installation d’Ubiquity devtools

Télécharger l’installeur Ubiquity-devtools avec Composer.

composer global require phpmv/ubiquity-devtools

Testez votre installation en faisant :

Ubiquity version
../_images/ubi-version.png

Vous pouvez obtenir à tout moment de l’aide sur une commande en tapant : Ubiquity help suivi de ce que vous cherchez.

Exemple :

Ubiquity help project

Création de projet

Créer le projet quick-start

Ubiquity new quick-start

Structure des dossiers

Le projet créé dans le dossier quick-start a une structure simple et lisible :

Le dossier app contient le code de votre future application :

app
  cache
  config
  controllers
  models
  views

Démarrage

Allez dans le dossier nouvellement créé quick-start et démarrez le serveur php intégré :

Ubiquity serve

Vérifier l’opération à l’adresse http://127.0.0.1:8090 :

../_images/quick-start-main.png

Note

Si le port 8090 est occupé, vous pouvez démarrer le serveur en utilisant un autre port en utilisant l’option -p.

Ubiquity serve -p=8095

Contrôleur

L’application en mode console devtools permet de gagner du temps dans les opérations répétitives. Utilisons la pour créer un contrôleur.

Ubiquity controller DefaultController
../_images/controller-creation.png

Vous pouvez éditer le fichier app/controllers/DefaultController dans votre IDE :

app/controllers/DefaultController.php
1namespace controllers;
2 /**
3  * Controller DefaultController
4  */
5class DefaultController extends ControllerBase{
6     public function index(){}
7}

Ajouter le message traditionnel, et tester votre page à l’adresse http://127.0.0.1:8090/DefaultController

app/controllers/DefaultController.php
class DefaultController extends ControllerBase{

    public function index(){
        echo 'Hello world!';
    }

}

Pour l’instant, nous n’avons pas défini de routes,
L’accès à l’application se fait donc selon le schéma suivant :
controllerName/actionName/param

L’action par défaut est la méthode index, elle n’a pas besoin d’être spécifiée dans l’url.

Route

Important

Le routage est défini avec l’attribut Route (avec php>8) ou l’annotation @route et n’est pas fait dans un fichier de configuration :
c’est un choix de conception.

Le paramètre automated mis à true permet aux méthodes de notre classe d’être définies comme des sous routes de la route principale /hello.

Avec annotations :

app/controllers/DefaultController.php
 1namespace controllers;
 2/**
 3 * Controller DefaultController
 4 * @route("/hello","automated"=>true)
 5 */
 6class DefaultController extends ControllerBase{
 7
 8    public function index(){
 9        echo 'Hello world!';
10    }
11
12}

Avec attributs (php>8) :

app/controllers/DefaultController.php
 1namespace controllers;
 2use Ubiquity\attributes\items\router\Route;
 3
 4#[Route('/hello', automated: true)]
 5class DefaultController extends ControllerBase{
 6
 7    public function index(){
 8        echo 'Hello world!';
 9    }
10
11}

Cache du routeur

Important

Aucune modification sur les routes n’est effective sans initialiser le cache.
Les annotations ne sont jamais lues au moment de l’exécution. C’est également un choix de conception.

Nous pouvons utiliser la console pour ré-initialiser le cache :

Ubiquity init-cache
../_images/init-cache.png

Vérifions que la route existe :

Ubiquity info:routes
../_images/info-routes1.png

Nous pouvons maintenant tester la page http://127.0.0.1:8090/hello

Action et route avec paramètres

Nous allons maintenant créer une action (sayHello) avec un paramètre (name), et la route associée (to) :
La route utilisera le paramètre name de l’action :

Ubiquity action DefaultController.sayHello -p=name -r=to/{name}/
../_images/action-creation.png

Après ré-initialisation du cache (commande init-cache), la commande info:routes devrait afficher :

../_images/2-routes.png

Changer le code dans votre IDE : l’action doit dire hello à quelqu’un (somebody)…

app/controllers/DefaultController.php
     /**
      * @route("to/{name}/")
      */
     public function sayHello($name){
             echo 'Hello '.$name.'!';
     }

et tester la page http://127.0.0.1:8090/hello/to/Mr SMITH

Action, route, paramètres et vue

Nous allons maintenant créer une action (information) avec deux paramètres (titre et message), la route associée (info), et une vue pour afficher le message :
La route utilisera les deux paramètres de l’action.

Ubiquity action DefaultController.information -p=title,message='nothing' -r=info/{title}/{message} -v

Note

Le paramètre -v (–view) est utiliser pour créer la vue associée à l’action.

Après ré-initialisation du cache, nous devrions avoir 3 routes :

../_images/3-routes.png

Retournons à notre environnement de développement pour voir le code généré :

app/controllers/DefaultController.php
     /**
      * @route("info/{title}/{message}")
      */
     public function information($title,$message='nothing'){
             $this->loadView('DefaultController/information.html');
     }

Nous devons passer les 2 variables à la vue :

/**
 * @route("info/{title}/{message}")
 */
public function information($title,$message='nothing'){
        $this->loadView('DefaultController/information.html',compact('title','message'));
}

Et utiliser ces 2 variables dans la vue twig associée :

app/views/DefaultController/information.html
     <h1>{{title}}</h1>
     <div>{{message | raw}}</div>

Nous pouvons tester votre page à l’addresse http://127.0.0.1:8090/hello/info/Quick start/Ubiquity est super simple
une évidence.

../_images/quiet-simple.png