Skip to content
This repository has been archived by the owner on Oct 10, 2023. It is now read-only.

Comunicación cliente servidor

Gabriel edited this page May 18, 2021 · 5 revisions

Documentación:


La comunicación cliente-servidor es posible únicamente entre JS y las clases PHP públicas. Estas últimas son aquellas que residen en archivos .pub.php dentro de espacios de nombre ...\publico. Esto es válido para el controlador de la aplicación, controladores, componentes y módulos.

Esto es así porque una clase puede presentar métodos públicos que no necesariamente deban ser públicos de cara al cliente. Por eso, cada clase se divide en la clase privada (donde los métodos public no son accesibles por HTTP) y la clase pública, .pub.php, donde todos los métodos public son accesibles por HTTP.

En el editor de vistas, todos los eventos admiten los prefijos servidor:, servidor-apl:, enviar: y enviar-apl:, que desencadenan en forma automática la comunicación con el servidor.

En los casos de servidor: y enviar:, si el valor es un nombre de método válido, será equivalente a ejecutar el método en el controlador de servidor de la vista actual. Si el valor tiene el formato controlador.metodo, se ejecutará el método en controlador (nótese que puede contener una ruta, por ejemplo ruta/al/controlador.metodo).

En los casos de servidor-apl: y enviar-apl:, se invocará el método del controlador principal (público) de la aplicación; es decir, en aplicacion.pub.php.

La diferencia entre servidor[-apl]: y enviar[-apl]: es que el segundo incluye los valores de todos los campos con nombre (resultado de ui.obtenerValores().

En el código JS:

this.servidor.metodo(1,2,3);

En PHP:

public function metodo($a,$b,$c) { //Los argumentos especificados en JS se pasan, en orden, al método del servidor.
}

Nota: this.servidor() (JS) admite cinco sobrecargas:

this.servidor.metodo(); //Sin argumentos

this.servidor.metodo(function(retorno) { //Con función de retorno, pero sin argumentos
});

this.servidor.metodo(function(retorno) { //Con función de retorno (primer argumento) y argumentos
},argumento1,argumento2,...);

this.servidor.metodo(argumento1,argumento2,argumento3,...); //Con argumentos, pero sin función de retorno

this.servidor.metodo(opciones); //Con un objeto de opciones

Puede verse que los dos últimos casos son muy similares. Si el primer argumento es un objeto, se asume que son las opciones de la solicitud, es decir, el último caso. Un argumento no puede ser una función, por lo que no deberían darse conflictos con los otros casos.

Pueden consultarse las posibles propiedades de opciones en la documentación de Servidor.

Si el primer argumento es una función, recibirá el valor de retorno automáticamente.

En JS:

this.servidor.metodo(function(retorno) {
    //retorno=6
},1,2,3);

En PHP:

public function metodo($a,$b,$c) {
    return $a+$b+$c;
}

En PHP, la propiedad cliente permite invocar métodos JS, siempre como respuesta a una solicitud.

public function metodo($a,$b,$c) {
    $this->cliente->error('Mensaje');
}

En JS:

this.error=function(mensaje) {
    ui.alerta(mensaje);
};

Esto es válido tanto desde controladores como desde el controlador principal de la aplicación.

En los controladores, por defecto, el nombre del controlador JS y del controlador PHP coinciden. Es posible especificar un controlador diferente en JS mediante:

this.controladorServidor="nombre-controlador";

Por su parte, desde el controlador principal de la aplicación siempre se invocarán métodos de aplicacion.pub.php.

El objeto global servidor permite realizar otras solicitudes personalizadas desde cualquier parte de la aplicación mediante servidor.invocarMetodo().

Un método útil es obtenerValores(), disponible en ui y en todos los componentes, que permite obtener un objeto con los valores de todos los componentes con nombre. De esta forma, es muy fácil enviar un formulario al servidor:

this.enviar=function() {
    this.servidor.procesarFormulario(ui.obtenerValores());
};

Nota: En todos los casos, los objetos y array se mantendrán como tales.

Sección en redacción.

Clone this wiki locally