Table of Contents

Ações

As ações são responsáveis pela 'lógica de negócios' do módulo. Uma ação geralmente consiste em um controlador e uma visualização de ação.

Um módulo pode:

  • Ações de chamada que já estão definidas no frontend do Zabbix.
  • Substituir ações padrão por ações personalizadas.
  • Definir ações completamente novas.

Para substituir um comportamento de ação padrão por algum comportamento personalizado, defina uma ação com o mesmo nome na configuração do módulo. Quando a ação é chamada, a ação do módulo será executada em vez da ação padrão do Zabbix.

Os arquivos de ação devem ser armazenados na pasta actions. Ações precisam ser especificadas no manifest.json.

Controlador

Fluxo de trabalho do controlador de ação:

  1. Verifique se todos os parâmetros passados em uma solicitação HTTP são válidos:
  • Chame o método checkInput() do controlador
  • Usar as regras de validação definidas em CNewValidator.php
  • Chamar o método validateInput()
  1. Verifique as permissões do usuário.

  2. Preparar os dados de acordo com os parâmetros passados: se checkInput() retornar true, o Zabbix chama o método doAction() do controlador.

  3. Preparar o array $data para a visualização. Use os métodos CControllerResponseData e setResponse() para armazenar a resposta no array $data.

Exemplo:

````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));

}

Você pode ver a lista completa de classes de controle disponíveis no Zabbix [código-fonte] (https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers?at=refs%2Fheads%2Frelease%2F6.4).