[comment]: # aside:2

[comment]: # ({f589b4e2-e31d2e06})
# Acciones

Las acciones son responsables de la 'lógica de negocio' del módulo. Una acción suele constar de un [controlador](#controller) y una [vista de acción](views#action-view). 

Un módulo puede: 

- Llamar a acciones que ya están definidas en el frontend de Zabbix.
- Anular acciones por defecto con acciones personalizadas.
- Definir acciones completamente nuevas.

Para anular el comportamiento de una acción por defecto con algún comportamiento personalizado, define 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 acción deben almacenarse en la carpeta *actions*. Las acciones deben ser especificadas en el [manifest.json](manifest).

[comment]: # ({/f589b4e2-e31d2e06})

[comment]: # ({17d83096-348a3343})
### Flujo de trabajo del controlador ControllerAction:

1) Comprobar que todos los parametros pasados en una peticion HTTP son válidos:
    - Llamar al método *checkInput()* del controlador
    - Usar las reglas de validación definidas en CNewValidator.php
    - Llamar al método *validateInput()*

2) Comprobar los permisos del usuario.
3) Preparar los datos según los parámetros pasados: si *checkInput()* devuelve true, Zabbix llama al método *doAction()* del controlador.

4) Preparar el array **$data** para la vista. Utiliza los métodos *CControllerResponseData* y *setResponse()* para almacenar la respuesta en el array **$data**.

Example:

````php
/** * 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 de usuario. 
 * 
 * @return bool 
 * 
 */

protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
    }
    
/** 
 * 
 * Ejecutar acción y generar objeto respuesta. 
 * 
 */

protected function do Acction(): void {
    $data = [
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];
    
    $this->setResponse(new CControllerResponseData($data));
}
````

::: notetip
Puede ver la lista completa de clases de controlador disponibles en el [código fuente](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers?at=refs%2Fheads%2Frelease%2F6.4) de Zabbix.
:::

[comment]: # ({/17d83096-348a3343})
