Acciones
Las acciones son responsables de la 'lógica de negocio' del módulo. Una acción generalmente consiste en 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.
- Sobrescribir acciones por defecto con acciones personalizadas.
- Definir acciones completamente nuevas.
Para sobrescribir el comportamiento de una acción por defecto con algún comportamiento personalizado, defina una acción con el mismo nombre en la configuración del módulo. Cuando se llame a la acción, se ejecutará la acción del módulo en lugar de la acción por defecto de Zabbix.
Los archivos de acciones deben almacenarse en la carpeta actions. Las acciones deben especificarse en el manifest.json.
Controller
Flujo de trabajo del controlador de acciones:
-
Compruebe que todos los parámetros enviados en una solicitud HTTP sean válidos:
- Llame al método checkInput() del controlador;
- Use las reglas de validación definidas en CNewValidator.php;
- Llame al método validateInput().
-
Compruebe los permisos del usuario.
-
Prepare los datos según los parámetros recibidos: si checkInput() devuelve true, Zabbix llama al método doAction() del controlador.
-
Prepare el array $data para la vista. Use CControllerResponseData y el método setResponse() para almacenar la respuesta en el array $data.
Ejemplo:
/**
* 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));
}
Puede ver la lista completa de clases de controlador disponibles en el código fuente de Zabbix.