Enrutar aplicaciones con Phalcon PHP
Enrutar aplicaciones con Phalcon PHP

En este tutorial vamos a utilizar la clase Criteria de Phalcon para crear un buscador sobre varios campos de una tabla. En cuestión utilizaremos el método fromInput de la clase Criteria, el cuál acepta tres parámetros, el inyector de dependencias que estamos utilizando, el modelo sobre el que queremos hacer la búsqueda y en este caso los datos del formulario que utilizaremos para realizar la búsqueda, el cuál será un array de datos post.

Está claro que podemos hacer un buscador de muchas formas, pero teniendo este método disponible, ¿por qué no utilizarlo?.

Lo primero que debemos hacer es importar el siguiente script a nuestro gestor de bases de datos.

Una vez lo tengamos, podemos crear nuestro proyecto y hacer la configuración con nuestra base de datos en el archivo config/config.php, si tienes problemas con la codificación de mysql puedes solucionarlo con este tutorial.

Ahora que ya tenemos creado el proyecto y configurada la conexión contra nuestra base de datos, podemos crear el modelo posts.

Llegados a este punto tenemos todo lo necesario para crear nuestro buscador, pero antes de empezar con el código, entendamos los dos casos que vamos a crear.

El método fromInput de la clase Criteria obtiene los datos enviados por post(en nuestro caso) y accede a la información metadata del modelo, la cuál le dice, por ejemplo, el tipo de campo que lo compone, en nuestro caso tenemos los siguientes.

  • id: campo de tipo integer, para metadata tiene valor 0 por ser integer
  • created_at: campo de tipo timestamp, para metadata tiene valor 1 por ser timestamp
  • title: campo de tipo varchar, para metadata tiene valor 2 por ser varchar
  • content: campo de tipo text, para metadata tiene valor 4 por ser text

Sabiendo esto, debemos entender la forma en la que realiza el trabajo el método fromInput, que es lo siguiente(hasta donde yo sé):

Si el tipo de campo es varchar lo que hace es una clausula like, en otro caso utiliza el operador de igualdad, para algunos casos puede ser útil, pero para otros no, nosotros veremos como hacer uso directamente del método fromInput, y después también veremos como crear el nuestro atendiendo a nuestras necesidades.

Esperando que haya quedado lo más claro posible, empecemos con el ejemplo. Abre el archivo views/index.volt y haz que tenga el siguiente aspecto.

Ahora crea un archivo en views/index llamado criteria.volt y añade el siguiente código.

Creo que si has seguido los tutoriales del blog o conoces Phalcon lo entenderás perfectamente, es un simple formulario para realizar búsquedas haciendo uso del motor de plantillas de Phalcon, si tienes dudas aquí te dejo un enlace a un tutorial sobre volt.

Volt, el motor de plantillas de Phalcon

Ahora abre tu controlador indexController y añade el siguiente código.

Es así de simple, el método fromInput obtiene los datos que llegan vía post y crea la condición que ha preparado dependiendo de los datos de tu modelo, en este ejemplo haciendo uso de todos los campos creará una condición como la siguiente.

Recordemos que son consultas preparadas. Como podemos ver, el resultado es perfecto, es decir, hace lo que tiene que hacer, pero también es verdad que la gran mayoría de las veces no dará resultados, y más aún por campos de texto.

Sabiendo que ésto funciona correctamente, abre el controlador ControllerBase y añade el siguiente código.

El método fromInput que acabamos de crear hace exactamente lo que viene a ser un caso más práctico, utilizará clausulas like con campos de tipo varchar, timestamp y text, así que nuestro buscador ahora tendrá un porcentaje más alto de retornar datos. Para poder utilizar nuestro nuevo método abre de nuevo el controlador IndexController y modifica la línea en la que llamamos al método fromInput de la clase Criteria por la siguiente.

Y eso es todo, espero que te haya parecido útil e interesante, dar las gracias a Andrés Gutierrez y todo el equipo de Phalcon por el gran trabajo que están llevando a cabo con Phalcon.