[comment]: # aside:2

[comment]: # ({f589b4e2-e31d2e06})
# Actions

Les actions sont responsables de la "logique métier" du module. Une action se compose généralement d'un [controller](#controller) et d'une [vue d'action](views#action-view).

Un module peut :

- Appeler des actions déjà définies dans l'interface Zabbix.
- Remplacer les actions par défaut par des actions personnalisées.
- Définir des actions complètement nouvelles.

Pour remplacer un comportement d'action par défaut par un comportement personnalisé, définissez une action portant le même nom dans la configuration du module.
Lorsque l'action est appelée, l'action du module sera exécutée à la place de l'action Zabbix par défaut.

Les fichiers d'action doivent être stockés dans le dossier *actions*. Les actions doivent être spécifiées dans le [manifest.json](manifest).

[comment]: # ({/f589b4e2-e31d2e06})

[comment]: # ({aa3673c9-348a3343})
### Contrôleur

Flux de travail du contrôleur d'action :

1. Vérifier que tous les paramètres transmis dans une requête HTTP sont valides :
    - Appeler la méthode *checkInput()* du contrôleur ;
    - Utiliser les règles de validation définies dans CNewValidator.php ;
    - Appeler la méthode *validateInput()*.

2. Vérifier les autorisations de l'utilisateur.

3. Préparer les données selon les paramètres transmis : si *checkInput()* renvoie true, Zabbix appelle la méthode *doAction()* du contrôleur.

4. Préparer le tableau **$data** pour l'interface. Utiliser *CControllerResponseData* et la méthode *setResponse()* pour stocker la réponse dans le tableau **$data**.

Exemple :

````php
/**
 * Valider les paramètres d'entrée.
 *
 * @return bool
 */
protected function checkInput(): bool {
    $ret = $this->validateInput([
        'status' => 'in '.implode(',', [HOST_STATUS_MONITORED, HOST_STATUS_NOT_MONITORED])
    ]);

    if (!$ret) {
        $this->setResponse(new CControllerResponseFatal());
    }

    return $ret;
}

/**
 * Vérifier les autorisations de l'utilisateur.
 *
 * @return bool
 */
protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}

/**
 * Exécuter l'action et générer l'objet de réponse.
 */
protected function do Action(): void {
    $data = [ 
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];
    
    $this->setResponse(new CControllerResponseData($data));
}
````

::: notetip
Vous pouvez consulter la liste complète des classes de contrôleur disponibles dans le [code source](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers) de Zabbix.
:::

[comment]: # ({/aa3673c9-348a3343})
