[comment]: # aside:2

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

Aktionen sind für die 'Geschäftslogik' des Moduls verantwortlich. Eine Aktion besteht in der Regel aus einem [controller](#controller) und einer [action view](views#action-view). 

Ein Modul kann: 

- Aktionen aufrufen, die bereits im Zabbix-Frontend definiert sind.
- Standardaktionen mit eigenen Aktionen überschreiben.
- Völlig neue Aktionen definieren.

Um das Verhalten einer Standardaktion durch ein benutzerdefiniertes Verhalten zu überschreiben, definieren Sie eine Aktion mit demselben Namen in der Modulkonfiguration. 
Wenn die Aktion aufgerufen wird, wird die Modulaktion anstelle der Standardaktion von Zabbix ausgeführt. 

Aktionsdateien sollten im Ordner *actions* gespeichert werden. Die Aktionen müssen in der [manifest.json](manifest) angegeben werden.

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

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

Workflow des Action-Controllers:

1. Prüfen Sie, dass alle in einer HTTP-Anfrage übergebenen Parameter gültig sind:
    - Rufen Sie die Methode *checkInput()* des Controllers auf;
    - Verwenden Sie die in CNewValidator.php definierten Validierungsregeln;
    - Rufen Sie die Methode *validateInput()* auf.

2. Prüfen Sie die Benutzerberechtigungen.

3. Bereiten Sie die Daten gemäß den übergebenen Parametern vor: Wenn *checkInput()* true zurückgibt, ruft Zabbix die Methode *doAction()* des Controllers auf.

4. Bereiten Sie das Array **$data** für die Ansicht vor. Verwenden Sie *CControllerResponseData* und die Methode *setResponse()*, um die Antwort im Array **$data** zu speichern.

Beispiel:

````php
/**
 * Validate input parameters.
 *
 * @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;
}

/**
 * Check user permissions.
 *
 * @return bool
 */
protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}

/**
 * Execute action and generate response object.
 */
protected function do Action(): void {
    $data = [ 
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];
    
    $this->setResponse(new CControllerResponseData($data));
}
````

::: notetip
Sie können die vollständige Liste der verfügbaren Controller-Klassen im Zabbix-[Quellcode](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers) einsehen.
:::

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