[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]: # ({aed2c24e-348a3343})
### Controller

Workflow des Action-Controllers:

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

2. Benutzerberechtigungen prüfen.

3. Die Daten entsprechend den übergebenen Parametern vorbereiten: Wenn *checkInput()* true zurückgibt, ruft Zabbix die Methode *doAction()* des Controllers auf.

4. Das **$data**-Array für die Ansicht vorbereiten. Verwenden Sie *CControllerResponseData* und die Methode *setResponse()*, um die Antwort im **$data**-Array 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
Die vollständige Liste der verfügbaren Controller-Klassen können Sie im Zabbix-[Quellcode](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers?at=refs%2Fheads%2Frelease%2F7.4) einsehen.
:::

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