Controleur

De Sydonie

Les contrôleurs dans Sydonie

Architecture

Chaque contrôleur hérite de Sydonie_Controller_Application. Lors de la soumission d'une URL, un contrôleur est créé par l'objet Controller_Front, en fonction de la classe définie dans l'URL, ou de l'identifiant de l'objet soumis s'il est possible de déterminer la classe correspondante (on utilise alors le registre pour déterminer la classe). Controleurs.png

Cet objet contrôleur possède une méthode execute(), héritée de Sydonie_Controller_Application, qu'il exécute pour savoir ce qu'il doit faire avec l'action demandée dans l'URL. Si cette action n'est pas définie, il renvoie au parent :

public function execute(){
 switch ($this->action) {
   case 'new':
      $this->newPhone();
   break;
   default:
    parent::execute();
  }
}

Sous-traitance entre contrôleurs

Dans certains cas, il peut être nécessaire de faire sous-traiter une action par un autre contrôleur. Ceci est rendue possible par l'utilisation d'une méthode de Sydonie_Controller_Application :

public static function actionFactory($action = "" ,$class = "" ,$id= "",$registryData = array()){
    $controllerClass = "{$class}_Controller";
    return new $controllerClass($action, $class, $id, $registryData);
}

Cette méthode renvoie un objet de type Controller. A partir de là, il est possible d'appeler une méthode interne à ce contrôleur pour sous-traiter une action.

Exemple d'utilisation

SousTraitanceControleurs.png

Prenons le cas où on a besoin de créer un nouvel email pour une personne. Le contrôleur d'email possède une méthode appelée newEmail() qui s'occupe des traitements lorsque l'on souhaite créer un nouveau mail par l'invocation d'URL. Un email appartenant à une personne, il est tout de même nécessaire de faire passer cette information, sans quoi notre email n'aurait pas de personne associée. On pourrait le faire en mettant à la fin de notre url ?socialEntityId=oihdeo56456a. Mais il est également possible de procéder de cette manière :

  • On crée une action "addEmail" pour le contrôleur de SocialEntity ;
  • Lors du traitement par le contrôleur, on va pouvoir appeler un nouveau contrôleur, qui sera un contrôleur d'Email :
public function addEmail(){
$controlerEmail = $this->actionFactory('new','Sydonie_SocialEntities_Email');
$vars = array('socialEntityId' => $this->getId());
$controlerEmail->newEmail($vars);
}


L'avantage de cette technique est que l'on peut créer de nouvelles actions qui sont équivalentes à des existantes, sans avoir à réécrire tout le code correspondant au traitement initial.