On this page

Azioni

Le azioni sono responsabili della 'logica di business' del modulo. Un'azione di solito è composta da un controller e una vista azione.

Un modulo può:

  • Richiamare azioni già definite nel frontend di Zabbix.
  • Sovrascrivere le azioni predefinite con azioni personalizzate.
  • Definire azioni completamente nuove.

Per sovrascrivere un comportamento predefinito di un'azione con un comportamento personalizzato, definire un'azione con lo stesso nome nella configurazione del modulo. Quando l'azione viene richiamata, verrà eseguita l'azione del modulo al posto dell'azione Zabbix predefinita.

I file delle azioni devono essere memorizzati nella cartella actions. Le azioni devono essere specificate nel file manifest.json.

Controller

Flusso di lavoro del controller delle azioni:

  1. Verificare che tutti i parametri passati in una richiesta HTTP siano validi:

    • Chiamare il metodo checkInput() del controller;
    • Utilizzare le regole di validazione definite in CNewValidator.php;
    • Chiamare il metodo validateInput().
  2. Verificare i permessi dell'utente.

  3. Preparare i dati in base ai parametri passati: se checkInput() restituisce true, Zabbix chiama il metodo doAction() del controller.

  4. Preparare l'array $data per la vista. Utilizzare CControllerResponseData e il metodo setResponse() per memorizzare la risposta nell'array $data.

Esempio:

/**
 * 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));
}

È possibile visualizzare l'elenco completo delle classi controller disponibili nel codice sorgente di Zabbix.