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».
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0A%0Aclass%20HelloWorldController%20extends%20AbstractController%0A%7B%0A%20%20%20%20%0A%7D%0A” message=”HelloWorldController.php” highlight=”” provider=”manual”/]
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"
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%3B%0A%0Ause%20muuska%5Cproject%5CAbstractSubApplication%3B%0A%0Aclass%20FrontSubApplication%20extends%20AbstractSubApplication%0A%7B%0A%20%20%20%20public%20function%20createController(%5Cmuuska%5Ccontroller%5CControllerInput%20%24input)%20%7B%0A%20%20%20%20%20%20%20%20%24result%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20if%20(%24input-%3EcheckName(‘hello-world’))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24result%20%3D%20new%20%5Cmyapp%5Ccontroller%5Cfront%5CHelloWorldController(%24input)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24result%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”FrontSubApplication.php” highlight=”” provider=”manual”/]
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:
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
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0A%0Aclass%20HelloWorldController%20extends%20AbstractController%0A%7B%0A%20%20%20%20protected%20function%20processDefault()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0A” message=”HelloWorldController.php” highlight=”” provider=”manual”/]
Pour spécifier le contenu qui sera affiché, ajoutez l'instruction suivante:
[pastacode lang=”php” manual=”%24this-%3Eresult-%3EsetContent(App%3A%3AcreateHtmlString(‘Hello%20world!’))%3B” message=”HelloWorldController.php” highlight=”” provider=”manual”/]
Le code complet du HelloWorld la classe sera la suivante:
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0Ause%20muuska%5Cutil%5CApp%3B%0A%0Aclass%20HelloWorldController%20extends%20AbstractController%0A%7B%0A%20%20%20%20protected%20function%20processDefault()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24this-%3Eresult-%3EsetContent(App%3A%3AcreateHtmlString(‘Hello%20world!’))%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”HelloWorldController.php” highlight=”” provider=”manual”/]
Ajout d'une nouvelle action dans le contrôleur.
Nous allons ajouter l'action "Say goodbye" au contrôleur HelloWorld .
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0Ause%20muuska%5Cutil%5CApp%3B%0A%0Aclass%20HelloWorldController%20extends%20AbstractController%0A%7B%0A%20%20%20%20protected%20function%20processDefault()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24this-%3Eresult-%3EsetContent(App%3A%3AcreateHtmlString(‘Hello%20world!’))%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20protected%20function%20processSayGoodbye()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24this-%3Eresult-%3EsetContent(App%3A%3AcreateHtmlString(‘Good%20bye!’))%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”HelloWorldController.php” highlight=”” provider=”manual”/]
Allez dans votre navigateur et entrez l’url en spécifiant l’action « say-goodbye » (http:localhost/muuska/en/hello-world/say-goodbye).
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetName())%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
getFullName
Retourne le nom complet du contrôleur.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetFullName())%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EhasQueryParam(‘my_param’))%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
Ajoutez le paramètre my_param dans l’URL pour tester. (http://localhost/muuska/en/hello-world?my_param=my_value).
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetQueryParam(‘my_param’))%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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.
parameter does not exist.
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetLang())%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
Modifier le code de langue dans l’URL et validez.
getLanguageInfo
Retourne l’instance de la langue courante. L’objet retourné est de type \muuska\localization\languageInfo.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetLanguageInfo())%3B%0A%7D%09%0A” message=”” highlight=”” provider=”manual”/]
getLanguages
Retourne la liste des langues actives. Elle retourne un tableau où chaque element est un objet de type \muuska\localization\languageInfo.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Einput-%3EgetLanguages())%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
getSubAppName
Retourne le nom de la sous application courante.
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20var_dump(%24this-%3Eresult-%3EgetTitle())%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
setTitle
Modifie le titre de la page.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EsetTitle(‘Hello%20world%20new%20title’)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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\.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EsetContent(App%3A%3AcreateHtmlString(‘Hello%20world%20new%20content’))%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EaddError(‘Hello%20world%20error’)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
addErrors
Ajoutes des messages d’erreurs à la page.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EaddErrors(array(‘Hello%20world%20error%201’%2C%20’Hello%20world%20error2’))%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
hasErrors
Vérifie si la page à des erreurs.
addSuccess
Ajoute un message de succès à la page.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EaddSuccess(‘Hello%20world%20%20success’)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EaddAlert(AlertType%3A%3AWARNING%2C%20’Hello%20world%20warning’)%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
addAlerts
Ajoute plusieurs messages d’alerte en fonction du type.
[pastacode lang=”php” manual=”protected%20function%20processDefault()%0A%7B%0A%20%20%20%20%24this-%3Eresult-%3EaddAlerts(AlertType%3A%3AINFO%2C%20array(‘Info%201’%2C%20’Info%202’))%3B%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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.
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0Ause%20muuska%5Cutil%5CApp%3B%0A%0Aclass%20TestParamController%20extends%20AbstractController%0A%7B%0A%20%20%20%20protected%20function%20initParamResolver()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24parsers%20%3D%20array(App%3A%3Acontrollers()-%3EcreateDefaultControllerParamParser(‘name’%2C%20true))%3B%0A%20%20%20%20%20%20%20%20%24this-%3EparamResolver%20%3D%20App%3A%3Acontrollers()-%3EcreateDefaultControllerParamResolver(%24this-%3Einput%2C%20%24this-%3Eresult%2C%20%24parsers)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20protected%20function%20processDefault()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24param%20%3D%20%24this-%3EparamResolver-%3EgetParam(‘name’)%3B%0A%20%20%20%20%20%20%20%20var_dump(%24param)%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]
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 » :
b. Paramètre lié à un model
La classe concernée est \muuska\controller\param\ModelControllerParamParser.
[pastacode lang=”php” manual=”%3C%3Fphp%0Anamespace%20myapp%5Ccontroller%5Cfront%3B%0A%0Ause%20muuska%5Ccontroller%5CAbstractController%3B%0Ause%20muuska%5Cutil%5CApp%3B%0Ause%20myapp%5Cmodel%5CLibraryDefinition%3B%0A%0Aclass%20TestParamController%20extends%20AbstractController%0A%7B%0A%20%20%20%20protected%20function%20initParamResolver()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F*%24parsers%20%3D%20array(App%3A%3Acontrollers()-%3EcreateDefaultControllerParamParser(‘name’%2C%20true))%3B%0A%20%20%20%20%20%20%20%20%24this-%3EparamResolver%20%3D%20App%3A%3Acontrollers()-%3EcreateDefaultControllerParamResolver(%24this-%3Einput%2C%20%24this-%3Eresult%2C%20%24parsers)%3B*%2F%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%24parsers%20%3D%20array(App%3A%3Acontrollers()-%3EcreateModelControllerParamParser(LibraryDefinition%3A%3AgetInstance()%2C%20’id’%2C%20true))%3B%0A%20%20%20%20%20%20%20%20%24this-%3EparamResolver%20%3D%20App%3A%3Acontrollers()-%3EcreateDefaultControllerParamResolver(%24this-%3Einput%2C%20%24this-%3Eresult%2C%20%24parsers)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20protected%20function%20processDefault()%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%24param%20%3D%20%24this-%3EparamResolver-%3EgetParam(‘id’)%3B%0A%20%20%20%20%20%20%20%20%24library%20%3D%20%24param-%3EgetObject()%3B%0A%20%20%20%20%20%20%20%20var_dump(%24library)%3B%0A%20%20%20%20%7D%0A%7D%0A” message=”TestParamController.php” highlight=”” provider=”manual”/]
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 :
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.