Comunidad de diseño web y desarrollo en internet online

Uso de Flash Remoting, PHP y MySQL con clases

Trabajar con programación orientada a objetos nos puede facilitar el trabajo en muchas ocasiones, siempre y cuando se sepa trabajar e implementar este paradigma de la programación. En esta ocasión Dano nos entrega la actualización de la clase AMFPHP ahora llamada FRemoting, el cambio de nombre se debe sencillamente porque ahora no es solo para AMFPHP, la actualización funciona para cualquier lenguaje que trabaje con la tecnología AMF de Flash.

Nota: en proyectos medianos-grandes la actualización de una clase, no debe cambiar su nombre al menos que su cambio sea muy severo.

Una vez más, el uso de esta clase es solo para facilitar el manejo de los servicios de Flash Remoting.

En esta ocasión voy a explicar el uso de la clase con un sencillo buscador de citas celebres, usando un servicio de AMFPHP. Dirán otra vez AMFPHP, ¿Por qué no con ASP.NET, Java o algún otro?... La respuesta es muy sencilla: ¡es libre y gratis!

El uso de la clase es realmente sencillo, solo usaremos el constructor de la clase y un método:

  • Constructor FRemoting: recibirá dos parametros el primero será la ruta del gateway y el segundo el servicio que se desea consumir. Uso:
  • import Danonino.FRemoting;
    var servicio:Danonino.FRemoting = new Danonino.FRemoting("http://tudominio/carpetaremoting/gateway","nombre del Servivcio");
  • Método process: recibe dos parámetros, el primero será para el método que se desea invocar de nuestro servicio, y el segundo un arreglo con los parámetros que recibe dicho método. Uso:
  • servicio.process("metodo",[parametro1,parametro2, parametroN]);

Bueno con el ejemplo el uso de la clase para hacerlo más claro:

Necesitaremos una base de datos para desarrollar nuestro ejemplo, con dos tablas, una para almacenar las citas y otra para los autores. Detallemos cada una:

Nota: para el desarrollo del ejemplo se uso MySQL como gestor de Base de Datos.

Tabla citas

Nombre de campo
Tipo de Dato
Características Adicionales
id
INT
Clave primaria, auto_increment, not null
idAutor
INT
null
cita
TINYTEXT
null

Tabla autores

Nombre de campo
Tipo de Dato
Características Adicionales
id
INT
Clave primaria, auto_increment, not null
nombre
varchar
null

Para el servicio utilice dos métodos, uno para hacer la sentencia sql para realizar la busqueda y otro para ejecutar la consulta sql. Veamos el código:

<?php
     class Citas{ //<--nombre de la clase igual al nombre del archivo
              function Citas (){ //<-- constructor de la clase, nombre igual al de la clase
                  $this->methodTable = array( //<--definimos lo metodos que tendra nuestra clase
                            "buscar" => array ( //<-- Metodo buscar
                                "description" => "hace una busqueda de citas celebres", //<--Comentario del metodo, describimos que hace dicho metodo 
                                "access" => "remote", //<-- tipo de acceso del metodo, posibles valores public, remote y private
                                "arguments" => array("busqueda") //<-- Parametros del metodo
                            ),
                            "query" => array (
                                "description" => "ejecuta un query en MySQL",
                                "access" => "private",
                                "arguments" => array ("sql")
                            )
                );
              }
              function buscar ($busqueda){
                $sql = "SELECT c.cita, a.nombre FROM citas as c INNER JOIN autores as a ON c.idAutor = a.id AND CONCAT(c.cita,a.nombre) LIKE '%".$busqueda."%'   ORDER BY a.nombre ASC";
                return $this->query($sql);  
              }
              function query ($sql){
                $conex= mysql_connect("hostname","usuario","password") or die("no se puede conectar porque ".mysql_error());
                mysql_select_db("nombre de tu base de datos");
                $result= mysql_query($sql);
                mysql_close($conex);                      
                return $result; //Consultar retonara un recordSet
              }
    }
?>

Es realmente sencillo el código del servicio, solo recibimos el texto que introdujo el usuario para realizar la búsqueda, construimos nuestra sentencia sql, la ejecutamos y le damos respuesta a flash.

Veamos la parte que nos interesa, que es la parte de como consumimos el servicio de AMFPHP con el código de ActionScript usando la clase FRemoting.

import Danonino.FRemoting.as;
var servicio:Danonino.FRemoting = new Danonino.FRemoting("url de tu gateway","Citas");

scrollCitas.setStyle("themeColor","0xFFFFFF");
citas.html= true;
citas.multiline= true;
citas.wordWrap = true;

servicio.events.onError= function (data){
    trace(data);
}

servicio.events.onBuscar = function (data){
    var total:Number = data.getLength();
    if (total>0){
        citas.htmlText="";
    } else{
        citas.htmlText="No hay ninguna información, use otro criterio de búsqueda";
    }
    for (i=0;i<total;i++){
        citas.htmlText+="<p>"+data.getItemAt(i).cita+"<p>";     
        citas.htmlText+="<p align='right'><b>"+data.getItemAt(i).nombre+"   </b></p><br>";
    }
}


buscar.onRelease = function (){
    servicio.process("buscar",[palabras.text]);
    citas.htmlText="Cargando información...";
}

servicio.process("buscar",[""]);
stop();

Como vemos es un código simple, al declarar nuestro objeto FRemoting(segunda línea), le pasamos la ruta de nuestro gateway.php y el nombre del servicio.

Para controlar los errores, porque no somos perfectos, siempre debemos hacerlo, solo debemos declarar el evento con el nombre de nuestro objeto(servicio en el código previo) + un punto + events + onError.

Para invocar a un método del servicio, solo debemos escribir el nombre de nuestro objeto + process, dándole con parámetro el nombre del método que se desea invocar ("buscar", ver primera línea del evento onRelease) y luego un arreglo con los parámetros (["palabras.text"]).

Para recibir la respuesta de algun método de nuestro servicio, solo debemos declarar un evento de nuestro objeto FRemoting, con el nombre del objeto + events + on + nombre del método que deseamos escuchar con la primera letra en mayúscula. Ver evento onBuscar.

Si quieren tener la clase aquí se la dejo: FRemoting.as, click derecho guardar como...

Nota: esta clase debe estar dentro de un paquete llamado Danonino, un paquete es simplemente una carpeta que contiene clases u otros paquetes.

Un especial agradecimiento a Mx, por hacer el diseño del ejemplo.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Descargar Archivo

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate