Acciones
Las acciones son responsables de la 'lógica empresarial' del módulo. Una acción normalmente consta de un controlador y una vista de acción.
Un módulo puede:
- Llamar a acciones que ya están definidas en el frontend de Zabbix.
- Anular acciones predeterminadas con acciones personalizadas.
- Definir acciones completamente nuevas.
Para anular un comportamiento de acción predeterminado con algún comportamiento personalizado, defina una acción con el mismo nombre en la configuración del módulo. Cuando se llama a la acción, se ejecutará la acción del módulo en lugar de la acción predeterminada de Zabbix.
Los archivos de acción deben almacenarse en la carpeta actions. Las acciones deben especificarse en manifiesto.json.
Controlador
Flujo de trabajo del controlador de acciones:
-
Comprobar que todos los parámetros pasados en una solicitud HTTP sean válidos:
- Llamar al método checkInput() del controlador;
- Usar las reglas de validación definidas en CNewValidator.php;
- Llamar al método validateInput().
-
Comprobar los permisos del usuario.
-
Preparar los datos según los parámetros pasados: si checkInput() devuelve true, Zabbix llama al método doAction() del controlador.
-
Preparar el array $data para la vista. Use CControllerResponseData y el método setResponse() para almacenar la respuesta en el array $data.
Ejemplo:
/**
* Validar parámetros de entrada.
*
* @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;
}
/**
* Comprobar permisos del usuario.
*
* @return bool
*/
protected function checkPermissions() {
return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}
/**
* Ejecutar la acción y generar el objeto de respuesta.
*/
protected function do Action(): void {
$data = [
'hosts_count' => API::Host()->get([
'countOutput' => true,
'filter' => [
'status' => $this->getInput('status')
]
])
];
$this->setResponse(new CControllerResponseData($data));
}
Puede ver la lista completa de clases de controlador disponibles en el código fuente de Zabbix.