On this page

Akcje

Za 'logikę biznesową' modułu odpowiadają akcje. Akcja zwykle składa się z controller i action view.

Moduł może:

  • Wywołać akcje, które są już zdefiniowane w interfejsie frontowym Zabbix.
  • Zastąpić akcje domyślne akcjami niestandardowymi.
  • Zdefiniować zupełnie nowe akcje.

Aby zastąpić domyślne zachowanie akcji jakimś niestandardowym zachowaniem, zdefiniuj akcję o tej samej nazwie w konfiguracji modułu. Kiedy akcja zostanie wywołana, zamiast domyślnej akcji Zabbix'a zostanie wykonana akcja modułu.

Pliki akcji powinny być przechowywane w folderze akcje. Akcje muszą być określone w pliku manifest.json.

Kontroler

Przepływ pracy kontrolera akcji:

  1. Sprawdź, czy wszystkie parametry przekazane w żądaniu HTTP są prawidłowe:

    • Wywołaj metodę checkInput() kontrolera;
    • Użyj reguł walidacji zdefiniowanych w CNewValidator.php;
    • Wywołaj metodę validateInput().
  2. Sprawdź uprawnienia użytkownika.

  3. Przygotuj dane zgodnie z przekazanymi parametrami: jeśli checkInput() zwróci true, Zabbix wywoła metodę doAction() kontrolera.

  4. Przygotuj tablicę $data dla widoku. Użyj CControllerResponseData oraz metody setResponse(), aby zapisać odpowiedź w tablicy $data.

Przykład:

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

Pełną listę dostępnych klas kontrolerów w Zabbix można zobaczyć w kodzie źródłowym.