Contrôleur

Analyse la requête de l’utilisateur et réalise le traitement approprié puis retourne la réponse.

1. Création d'un contrôleur

Pour créer un contrôleur, allez dans le dossier «myapp/controller/front», puis ajoutez votre fichier par exemple «HelloWorldController.php».
Le nom de la classe doit être le même que le nom du fichier; cette classe doit hériter de la classe «muuska\controller\AbstractController».

 

HelloWorldController.php
<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;

class HelloWorldController extends AbstractController
{
    
}

 

Une fois la classe créée, nous devons fournir les moyens de créer une instance de cette classe. Pour ce faire, ouvrez la classe "FrontSubApplication" (\myapp\FrontSubApplication) et redéfinissez la méthode "createController"

 

FrontSubApplication.php
<?php
namespace myapp;

use muuska\project\AbstractSubApplication;

class FrontSubApplication extends AbstractSubApplication
{
    public function createController(\muuska\controller\ControllerInput $input) {
        $result = null;
        if ($input->checkName('hello-world')) {
            $result = new \myapp\controller\front\HelloWorldController($input);
        }
        return $result;
    }
}

 

Votre contrôleur est enfin prêt, il vous suffit de saisir l'URL pour y accéder.

2. URL d'un contrôleur

L'URL permettant l'accès à un contrôleur doit être au format {baseUrl}/{subAppUrlPath} {lang}/{controllerName}/{action}

{baseUrl}: variable représentant l'url de base. Exemple http: localhost/muuska ou https: www.domain.com. Si la sous-application à laquelle le contrôleur est lié a une valeur dans sa configuration pour ce champ «hôte», c'est cette valeur qui sera utilisée.

{subAppUrlPath}: correspond au champ «url_path» présent dans la configuration de la sous-application courante suivi de «/». Si la valeur de «url_path» est vide, vous ne devez pas ajouter le «/».

{lang}: Le code de langue. Exemple «fr» ou «en». Si la sous-application à laquelle le contrôleur est lié définit dans sa configuration le champ «lang_in_url» avec la valeur «false», vous ne devez pas spécifier le code de langue dans l'url.

{controllerName}: Le nom du contrôleur. Cette valeur doit être en minuscules donc si le nom du contrôleur est composé de plusieurs mots (par exemple «HelloWorld»), vous devrez utiliser un tiret (-) pour séparer les mots (le nom du contrôleur sera «bonjour- monde »). Si vous ne le spécifiez pas, le nom du contrôleur correspondra à «home».

{action}: Le nom de l'action. Cette valeur doit être en minuscules donc si le nom de l'action est composé de plusieurs mots (Par exemple «UpdatePassword»), vous devrez utiliser un tiret (-) pour séparer les mots (Le nom du contrôleur sera «update -mot de passe "). Si vous ne le spécifiez pas, le nom de l'action sera «par défaut».

Exemple d'URL:

http: localhost / muuska / en où {baseUrl} = http: localhost / muuska /, {subAppUrlPath} est vide, {lang} = en, {controllerName} est vide (mais la valeur considérée sera "home"), {action } est vide (mais la valeur considérée sera «par défaut»).

http: localhost/muuska/en/hello-world où {baseUrl} = http:localhost/muuska/, {subAppUrlPath} est vide, {lang} = en, {controllerName} = hello-world, {action} est vide (mais la valeur considérée sera «par défaut»).

http: localhost/muuska/en/hello-world au revoir où {baseUrl} = http: localhost/muuska/, {subAppUrlPath} est vide, {lang} = en, {controllerName} = hello-world, {action} = au revoir.

http: localhost/muuska/admin/en/hello-world où {baseUrl} = http: localhost/muuska/, {subAppUrlPath} = admin, {lang} = en, {controllerName} = hello-world, {action} est vide (Mais la valeur considérée sera «par défaut»).

http: localhost/muuska/admin/hello-world where {baseUrl} = http: localhost/muuska/, {subAppUrlPath} = admin, {lang} n'est pas spécifié car dans la configuration de la sous-application actuelle, le champ lang_in_url a la valeur "false", {controllerName} = hello-world, {action} est vide (mais la valeur considérée sera "default").

https: www.domain.com/en/hello-world/goodbye where {baseUrl} = https: www.domain.com, {subAppUrlPath} est vide, {lang} = en, {controllerName} = hello-world, {action } = goodbye.

https: www.api.domain.com/en/hello-world/goodbye where {baseUrl} = https: www.api.domain.com because in the configuration of the current sub-application the “host” field has the value www. api.domain.com, {subAppUrlPath} is empty, {lang} = en, {controllerName} = hello-world, {action} = goodbye.

https: www.domain.com/en/hello-world,

Pour accéder au contrôleur que vous venez de créer, entrez l'url du contrôleur (http: localhost / muuska / en / hello-world) dans votre navigateur; Vous aurez une page similaire à la suivante:

test controller

La page est toujours vide.

3. La notion d'action

The controller performs processing according to the action specified in the request.

• Si le nom de l'action dans la requête se compose de plusieurs mots, vous devez utiliser un tiret (-) pour séparer les mots. Exemple "update-password" (http: localhost / muuska / en / hello-world / update-password)
• Si aucune action n’est spécifiée, le nom de l’action aura la valeur «default»
• La méthode à exécuter pour traiter une action dans un contrôleur doit être nommée comme suit: process {actionName} où actionName Représente le nom de l'action dans la nomenclature «Camel case» (par exemple «UpdatePassword» avec la première lettre du action en majuscules.
Exemple: processUpdatePassword, processAdd, processDefault.
Pour notre contrôleur HelloWorld, nous utiliserons la méthode processDefault

 

HelloWorldController.php
<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;

class HelloWorldController extends AbstractController
{
    protected function processDefault()
    {
        
    }
}

Pour spécifier le contenu qui sera affiché, ajoutez l'instruction suivante:

HelloWorldController.php
$this->result->setContent(App::createHtmlString('Hello world!'));

Le code complet du HelloWorld la classe sera la suivante:

HelloWorldController.php
<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;
use muuska\util\App;

class HelloWorldController extends AbstractController
{
    protected function processDefault()
    {
        $this->result->setContent(App::createHtmlString('Hello world!'));
    }
}

test content controller

Ajout d'une nouvelle action dans le contrôleur.
Nous allons ajouter l'action "Say goodbye" au contrôleur HelloWorld .

 

HelloWorldController.php
<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;
use muuska\util\App;

class HelloWorldController extends AbstractController
{
    protected function processDefault()
    {
        $this->result->setContent(App::createHtmlString('Hello world!'));
    }
    
    protected function processSayGoodbye()
    {
        $this->result->setContent(App::createHtmlString('Good bye!'));
    }
}

 

Allez dans votre navigateur et entrez l’url en spécifiant l’action « say-goodbye » (http:localhost/muuska/en/hello-world/say-goodbye).

test content controller

4. Contrôleur Input

Est un objet de type \muuska\controller\ControllerInput fournit au contrôleur au moment de son instanciation. Cette classe contient les ressources dont le contrôleur a besoin pour réaliser ses traitements.
Pour accéder à cet objet depuis votre contrôleur, écrivez $this->input.
Voici la liste des méthodes disponibles :

getName

Retourne le nom du contrôleur courant.

protected function processDefault()
{
    var_dump($this->input->getName());
}

 

var_dump

getFullName

Retourne le nom complet du contrôleur.

protected function processDefault()
{
    var_dump($this->input->getFullName());
}

 

getFullName vardump

checkName

Vérifie si le nom du contrôleur est égal au nom que vous passez en paramètre.

checkFullName

Vérifie si le nom complet du contrôleur est égal au nom que vous passez en paramètre.

getAction

Retourne l’action courante.

getRequestType

Retourne le type de requête.

isAjaxRequest

Vérifie s’il s’agit d’une requête AJAX ou pas. Les requêtes AJAX doivent avoir dans l’URL le un paramètre "ajax" qui aura la valeur 1. Exemple http://localhost/muuska/en/hello-world?ajax= 1.

hasQueryParam

Vérifie si un paramètre est présent dans l’URL.

protected function processDefault()
{
    var_dump($this->input->hasQueryParam('my_param'));
}

 

Ajoutez le paramètre my_param dans l’URL pour tester. (http://localhost/muuska/en/hello-world?my_param=my_value).

 

my param

getQueryParam

Retourne la valeur d’un paramètre présent dans l’URL. Elle prend en paramètre le nom du paramètre et la valeur à retourner au cas où le paramètre n’existe pas.

protected function processDefault()
{
    var_dump($this->input->getQueryParam('my_param'));
}

 

getQueryParam

hasPostParam

Vérifie si un paramètre est présent dans le POST.

getPostParam

Retourne la valeur d’un paramètre présent dans le POST. Elle prend en paramètre le nom du paramètre et la valeur à retourner au cas où le paramètre n’existe pas.

hasParam

Vérifie si un paramètre est présent dans l’URL ou dans le POST.

getParam

Retourne la valeur d’un paramètre présent dans l’URL ou dans le POST. Elle prend en paramètre le nom du paramètre et la valeur à retourner au cas où le paramètre n’existe pas.

getLang

Retourne le code de la langue courante.

protected function processDefault()
{
    var_dump($this->input->getLang());
}

 

Modifier le code de langue dans l’URL et validez.

getLang

getLanguageInfo

Retourne l’instance de la langue courante. L’objet retourné est de type \muuska\localization\languageInfo.

protected function processDefault()
{
    var_dump($this->input->getLanguageInfo());
}	

 

getLanguageInfo

getLanguages

Retourne la liste des langues actives. Elle retourne un tableau où chaque element est un objet de type \muuska\localization\languageInfo.

protected function processDefault()
{
    var_dump($this->input->getLanguages());
}

 

getLanguages

getSubAppName

Retourne le nom de la sous application courante.

getSubAppName

getProject

Retourne l’instance du projet courant. L’objet retourné est de type \muuska\project\Project.

getSubProject

Retourne l’instance du sous projet courant. L’objet retourné est de type \muuska\project\SubProject.

getSubApplication

Retourne l’instance de la sous application courante. L’objet retourné est de type \muuska\project\SubApplication.

hastheme

Vérifie si la sous application courante a un thème.

getTheme

Retourne l’instance du thème utilisé par la sous application courante. Elle retourne « null » si la sous application n’a pas de thème. L’objet retourné est de type \muuska\util\theme\Theme.

getDAO

Retourne l’instance du DAO en fonction de la définition du model fourni en paramètre. L’objet retourné est de type \muuska\dao\DAO.

getDaoFactory

Retourne le gestionnaire d’accès aux données. L’objet retourné est de type \muuska\dao\DAOFactory.

createSelectionConfig

Crée une instance du configurateur de sélection de donnée. L’objet retourné est de type \muuska\dao\util\SelectionConfig.

createSaveConfig

Crée une instance du configurateur d’enregistrement de donnée. L’objet retourné est de type \muuska\dao\util\SaveConfig.

createDeleteConfig

Crée une instance du configurateur de suppression de donnée. L’objet retourné est de type \muuska\dao\util\DeleteConfig.

getRequest

Retourne l’instance de la requête de l’utilisateur. L’objet retourné est de type \muuska\http\Request.

getResponse

Retourne l’instance du flux de réponse de l’utilisateur. L’objet retourné est de type \muuska\http\Response.

getVisitorInfoRecorder

Retourne l’objet permettant d’enregistrer les informations du visiteur courant (Cookie ou Session). L’objet retourné est de type \muuska\http\VisitorInfoRecorder.

getCurrentUser

Retourne l’instance du gestionnaire de l’utilisateur courant. L’objet retourné est de type \muuska\security\CurrentUser.

5. Résultat du contrôleur

Est un objet de type \muuska\controller\DefaultControllerResult. Cet objet contient le résultat du d’exécution d’une action.
Pour accéder à cet objet depuis votre contrôleur, écrivez $this->result.
Voici la liste des méthodes disponibles :

getTitle

Retourne le titre de la page.

protected function processDefault()
{
    var_dump($this->result->getTitle());
}

 

getTitle

setTitle

Modifie le titre de la page.

protected function processDefault()
{
    $this->result->setTitle('Hello world new title');
}

 

setTitle

setContent

Modifie le contenu principal de la page. Elle prend en paramètre un objet de type \muuska\html\HtmlContent qui représente un composant HTML. Vous verrez la liste des composants disponibles dans le namespace \muuska\html\.

 

protected function processDefault()
{
    $this->result->setContent(App::createHtmlString('Hello world new content'));
}

 

setContent

hasContent

Vérifie si la page a un contenu principal.

getContent

Retourne le contenu principal de la page. L’objet retourné est de type \muuska\html\HtmlContent. Si le contenu principal n’existe pas elle retourne « null »

addError

Ajoute un message d’erreur à la page.

protected function processDefault()
{
    $this->result->addError('Hello world error');
}

 

addError

addErrors

Ajoutes des messages d’erreurs à la page.

protected function processDefault()
{
    $this->result->addErrors(array('Hello world error 1', 'Hello world error2'));
}

 

addErrors

hasErrors

Vérifie si la page à des erreurs.

addSuccess

Ajoute un message de succès à la page.

protected function processDefault()
{
    $this->result->addSuccess('Hello world  success');
}

 

addSuccess

addAlert

Ajoute une alerte à la page. Elle prend en paramètre le type de l’alerte (les types d’alertes disponibles sont dans la classe \muuska\html\constants\AlertType) et le message de l’alerte.

protected function processDefault()
{
    $this->result->addAlert(AlertType::WARNING, 'Hello world warning');
}

 

addAlert

addAlerts

Ajoute plusieurs messages d’alerte en fonction du type.

protected function processDefault()
{
    $this->result->addAlerts(AlertType::INFO, array('Info 1', 'Info 2'));
}

 

addAlerts

getAssetSetter

Retourne le gestionnaire des assets (css, js, etc…). L’objet retourné est de type \muuska\asset\AssetSetter.

setRedirection

Renseigne une redirection. Elle prend en paramètre un objet de type \muuska\http\redirection\Redirection.

hasRedirection

Vérifie si une redirection a été renseignée.

6. Paramètre de contrôleur

Est un objet de type \muuska\controller\param\ControllerParamResolver. Cet objet vous permet de définir les paramètres de base de votre contrôleur et de récupérer facilement leur valeur. Ainsi, vous n’aurez plus à vérifier vous-même si un paramètre obligatoire (Par l’identifiant d’un objet au moment de Edition) est présent.

Pour accéder à cet objet depuis votre contrôleur, écrivez $this->paramResolver.

Pour configurer votre gestionnaire de paramètre, vous devez redéfinir la méthode « initParamResolver » dans votre contrôleur.

Pour définir un paramètre, l’interface \muuska\controller\param\ControllerParamParser énumère la liste des méthodes attendues.

Il existe trois types de paramètre :

a. Paramètre standard

La classe concernée est : \muuska\controller\param\DefaultControllerParamParser.

<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;
use muuska\util\App;

class TestParamController extends AbstractController
{
    protected function initParamResolver()
    {
        $parsers = array(App::controllers()->createDefaultControllerParamParser('name', true));
        $this->paramResolver = App::controllers()->createDefaultControllerParamResolver($this->input, $this->result, $parsers);
    }
    
    protected function processDefault()
    {
        $param = $this->paramResolver->getParam('name');
        var_dump($param);
    }
}

 

Standard parameter

La méthode « processDefault » ne s’exécute pas car le paramètre « name » n’a pas été renseigné dans l’URL.
Si vous ajoutez le paramètre « name » dans l’url vous verrez le contenu de la variable « param » :

 

parameter name

b. Paramètre lié à un model

La classe concernée est \muuska\controller\param\ModelControllerParamParser.

TestParamController.php
<?php
namespace myapp\controller\front;

use muuska\controller\AbstractController;
use muuska\util\App;
use myapp\model\LibraryDefinition;

class TestParamController extends AbstractController
{
    protected function initParamResolver()
    {
        /*$parsers = array(App::controllers()->createDefaultControllerParamParser('name', true));
        $this->paramResolver = App::controllers()->createDefaultControllerParamResolver($this->input, $this->result, $parsers);*/
        
        $parsers = array(App::controllers()->createModelControllerParamParser(LibraryDefinition::getInstance(), 'id', true));
        $this->paramResolver = App::controllers()->createDefaultControllerParamResolver($this->input, $this->result, $parsers);
    }
    
    protected function processDefault()
    {
        $param = $this->paramResolver->getParam('id');
        $library = $param->getObject();
        var_dump($library);
    }
}

 

Parameter linked

L’erreur affiché est dû au fait qu’il y a pas de bibliothèque enregistrée avec l’identifiant « 150 ».
Si vous entrez un identifiant valide, vous aurez l’affichage suivant :

 

var_dump_error

7. Créateur d’URL du contrôleur

Est un objet de type \muuska\url\ControllerUrlCreator. Cet objet permet de créer les URL.
Pour accéder à cet objet depuis votre contrôleur, écrivez $this->urlCreator.