Contrôleurs

Introduction

Dans le dossier controllersse trouve vos contrôleurs, qui se nomme suivant cette convention : NomController.php. Normalement vous devez trouvez un contrôleur déjà existant au nom de MainController.php, ouvrez le et analysons son code.

/app/controllers/MainController.php
namespace App\Controller;

class MainController extends \Wigax\BaseController {
	public function index ($route) {
		return $this->render('index.tpl');
	}
}

La ligne 1 déclare l'espace de nom dans lequel nous travaillons (ici App\Controller), cette ligne est obligatoire ! La ligne 3 déclare la classe MainController qui doit avoir le même nom que le fichier sans .php et c'est ce nom que vous utiliserez dans vos routes. Cette classe hérite de BaseController dans l'espace de nom Wigax et cette héritage doit obligatoirement être présent ! Enfin ligne 4, 5 et 6 on déclare la méthode index (qui sera appelé quand on demande l'url / , d'après nos routes). Cette méthode prend un paramètre : l'objet route qui a appelé cette méthode. Ici on effectue qu'une simple action qui est de retourner la vue index.tplprésente dans le dossier /app/views.

Route vers méthode

Donc lorsque le router associe une route à l'url demandée, il appel la méthode associé au contrôleur. Cette méthode doit retourner le résultat de la méthode render du même objet (d'où le $this). Cela s'écrie plus communément :

return $this->render(vue);

La méthode render prend un maximum de trois paramètre :

  1. le nom de la vue

  2. le tableau de paramètres associés à la vue (les variables qui seront utilisées dedans)

  3. le tableau "d'events" sur lequel nous reviendrons plus bas

Exemple :

return $this->('index.tpl', ['my_var' => 'value'], ['my_event' => 'my_action']

Les events

Maintenant que le principe du contrôleur vous semble acquis, intéressons nous à la partie principale de ce framework : les events. Ces derniers sont en fait des interactions ajax mais gérées automatiquement par le framework.

Ecriture

Un event s'écrie sous la forme :

['id_élément_déclencheur->événement' => 'Controleur@Methode']

Vous remarquez que cela ressemble beaucoup à une route. L'id de l'élément déclencheur est n'importe qu'elle id présent dans le Html. L’événement est n'importe quel événement javascript (click, mouseover, mousedown, ...). La dernière partie fonctionne comme les routes. On peut donc aussi rediriger vers une route. Si la route possède un champ variable on peut utiliser les crochets [ et ] pour définir ce champ :

['my_id->click' => 'montrer_article[7]']

Déclaration

Vous pouvez déclarer vos events à la fin de votre méthode lors de l'appel à la fonction render ou alors n'importe où dans le script à l'aide de la méthode addEvent :

$this->addEvent (['my_id->click' => 'MainController@HandleClick']);

Implémentation dans le contrôleur

Comme pour les routes, voici la méthode que vous devez implémenter :

public function HandleClick($event) {
    return [ 
        'title' => 'my title',
        'url'   => 'my url',
        '#my_id' => 'my text',
        '#my id2' => $this->render('formulaire.tpl')
    ];
}

Vous avez ici toutes les possibilités. Votre méthode peut donc avoir l'event comme paramètre et doit retourner un tableau où :

  • Les champs title et url sont facultatif

  • Les champs #id sont les éléments qui vont être changé dans le code, vous pouvez donc tout à fait rendre une vue. (comme à la ligne 6)

Formulaires

Les formulaires utilise l'event submit pour fonctionner, donc l'action que vous placerez dans votre HTML ne sera pas exécutée et on peut réduire l'écriture à :

<form id="my_form">
    <input ...
    <button type="submit">Envoyer</button>
</form>

Sans oublier de rajouter l'event :

$this->addEvent(['my_form->submit' => 'MainController@Update']);

Last updated