CodeIgniter

Middleware en CodeIgniter

CodeIgniter, en su versión 3, carece de un buen middleware.

Hace más de medio año hice un proyecto en donde, para controlar las sesiones de una manera fácil (y proteger el acceso) necesité un middleware sencillo.

Por eso es que hoy vamos a ver cómo instalar un Middleware en CodeIgniter de una manera fácil.

Continue reading…

Eliminar todos los datos de una tabla en CodeIgniter

En un trabajo que estoy realizando intenté hacer un delete de este tipo en CodeIgniter:

$this->db->delete("la_tabla");

Cosa que permitiría eliminar todos los elementos de una tabla, pero no fue así y en su lugar salió el mensaje:

Deletes are not allowed unless they contain a “where” or “like” clause.

Que quiere decir que las eliminaciones no están permitidas si no les pones un where o un like. Pero si ejecutamos:

delete from mi_tabla;

En una consola de MySQL, todo va bien. Bueno, no importa, el problema fue con CodeIgniter y la solución es realmente sencilla.

Continue reading…

Generador de código (Modelo, vista y controlador) para CodeIgniter

Introducción

Hace algún tiempo, por diversión, escribí un generador de código de CodeIgniter.

Todo nació a partir de una plática con unos amigos sobre hacer un script que, dada una base de datos, generase el código necesario del modelo, la vista y el controlador para que un ser humano hiciera las operaciones básicas.

Obviamente este generador de código de CodeIgniter es algo hecho por diversión y que no debería usarse en producción pero es entretenido de usar.

Para escribirlo no usé nada más que el propio lenguaje de PHP. Y no, no es magia, son simples concatenaciones de cadenas, formateo de las mismas con sprintf y condiciones.

Pero bueno, vamos por partes y veamos cómo funciona, porque sí, claro que funciona y puede generar un CRUD en menos de un segundo 🙂

Continue reading…

Pequeño sistema de ventas con CodeIgniter y MVC

Introducción

Sistema de ventas MVC con PHP y CodeIgniter

Sistema de ventas MVC con PHP y CodeIgniter

Luego de mucho tiempo al fin traigo una versión 2 del sistema de ventas publicado anteriormente. No es un sistema de ventas como tal, pues es un simple ejemplo, pero no lo puedo llamar de otro modo.

En ese post prometí que haría otro tutorial pero siguiendo el patrón MVC y qué mejor que hacerlo con CodeIgniter (para repasar, ya que justo ahora tengo que hacer un proyecto usándolo)

Lo que trae esta versión no es nada diferente en cuanto a su uso, sino a su programación.

Continue reading…

Subir y publicar un proyecto de CodeIgniter a internet

Introducción

En este post explicaré algunos consejos y formas de subir un proyecto de CodeIgniter a internet. Veremos cómo asegurar nuestra app, qué archivos subir y por qué lo hacemos. Todo esto es para mostrarte cómo publicar tu app de CodeIgniter.

Recuerda que primero debes leer una pequeña introducción a CodeIgniter porque ahí indico algunas cosas básicas.

Continue reading…

Ejemplo de controlador en CodeIgniter 3

Introducción

Acabamos de ver cómo crear y usar un modelo en el framework CodeIgniter. Veamos ahora un ejemplo de cómo se usan los controladores en CodeIgniter. Vamos a definir un controlador y ver cómo se invoca.

Un controller se usa como pegamento entre el modelo y la vista. También se usa para conectar los datos que pone al usuario con la base de datos, a través del modelo.

Por ejemplo, reciben datos de un formulario y los pasan al modelo, dependiendo del resultado le devuelven un mensaje al usuario.

Continue reading…

Ejemplo y anatomía de un modelo en CodeIgniter 3

Introducción

Hoy veremos un ejemplo de modelo en CodeIgniter 3 para ver cómo podemos crearlo, además de las ventajas que tiene y las responsabilidades que le podemos asignar.

En CodeIgniter, un modelo representa un objeto o una entidad dentro de nuestro sistema. Por ejemplo, podemos tener el modelo Usuario, Venta, Recibo, Mascota, etcétera. Es como una clase (técnicamente sí es una clase, pero me refiero al modo de abstraerlo) que se comunica con un controlador.

Continue reading…

Subir foto desde jQuery a un servidor con PHP y CodeIgniter utilizando AJAX

Introducción

Hoy veremos cómo subir una foto o imagen a un servidor PHP. Dicha foto será elegida por el usuario desde un input de tipo file. La subiremos utilizando la clase FormData de Javascript en conjunto con la clase para recibir archivos en CodeIgniter.

Esto lo haremos utilizando AJAX, por lo que la experiencia del usuario será mejor. Este post funciona para imágenes GIF, PNG o JPG pero supongo que igualmente podemos subir archivos de cualquier tipo.

Lado del cliente

En el lado del cliente tengo mi input de tipo file, con un id para tener una referencia a él desde jQuery. También tengo un botón que servirá para enviar el archivo. No hay formulario porque como tal no enviaremos un formulario, enviaremos un archivo por AJAX:

En Javascript tengo la referencia al input y al botón. Escucharemos el click del botón y accederemos al arreglo de archivos de nuestro input. Con ello crearemos un objeto de tipo FormData y luego lo mandaremos por AJAX a nuestro controlador de CodeIgniter:

Con eso ya hemos terminado la parte del cliente. Vamos con el servidor.

Lado del servidor

En nuestro controlador de CodeIgniter debemos cargar el ayudante para subir archivos. Recibir la imagen será pan comido. En mi caso, mi método se llama ponerFotoAlumno y se ve así:

Lo que hacemos es simplemente recibir el archivo y guardarlo en la carpeta fotos_alumnos. Las opciones que puse son simplemente para aceptar imágenes que no excedan el peso de 2 MB.

Conclusión

Con esto pude subir una foto con FormData utilizando AJAX y jQuery. Hay opciones para cambiar el nombre de la imagen, recibir el nombre con el que se guardó, etcétera. La documentación oficial la dejo abajo.

Por cierto, en mi caso utilizo JSON para devolver la respuesta de la petición y trabajar con ella en el cliente, pero esto es opcional y podemos manejarlo como deseemos.

Referencias

Aquí dejo las especificaciones de cada cosa utilizada.

Clase para trabajar con archivos subidos en CodeIgniter

FormData

Acceder a php // input en PHP con CodeIgniter

Introducción

No sé si sólo yo lo hago, pero cuando es necesario mandar datos complejos (no simples formularios) podemos utilizar JSON para serializarlos y luego hacer el proceso inverso del otro lado.

Pero del otro lado no leeremos a $_POST sino al stream php://input. En php puro lo hacemos con file_get_contents, pero si estamos utilizando un framework, lo tenemos que hacer a su manera.

Hoy veremos cómo obtener datos del stream php://input en CodeIgniter.

Leer php://input con la propiedad raw_input_stream

Es muy, muy fácil. Simplemente accedemos a la propiedad raw_input_stream de input. Y con eso tenemos. Así se hace:

Con eso ya podemos des-serializarlos. En mi caso, utilizo JSON, así que llamaría a la función json_decode y listo, tendría los objetos/arreglos tal y como los mandé del lado del cliente.

La ventaja que ofrece este método es que, según la documentación, podemos leerlo en cualquier momento; ya que php://input sólo puede ser leído una vez.

Obtener último ID insertado en tabla con CodeIgniter

Introducción

Es muy probable que en nuestra base de datos (MySQL en mi caso) tengamos una tabla con un campo de auto incremento o AUTO_INCREMENT.

Si trabajamos con estos campos y con CodeIgniter, puede que nos preguntemos ¿Cómo obtener el último ID que ha sido insertado en nuestra tabla? Este ID nos sirve, por ejemplo, al hacer relaciones.

Supongamos que tenemos una tabla de productos vendidos y otra de ventas. Si en los productos vendidos guardamos el ID de venta, primero necesitamos hacer la venta, luego obtener el último ID de la base de datos y, ya con esto, guardar el Id de venta en la tabla de productos vendidos.

Obtener último ID insertado

CodeIgniter, un framework de PHP, provee esto en un método muy simple. Recordemos que para usar la base de datos ya sea en nuestro modelo o controlador, primero debemos cargarla.

El código para obtener el último ID guardado es este:

Ejemplo de obtener el último ID de la base de datos

Para poner un ejemplo, aquí dejo un modelo en donde lo he estado utilizando. Básicamente guarda la información de la persona en la base de datos y devuelve el último ID insertado.

Notemos por favor que en el constructor es en donde cargamos la base de datos.

Con eso terminamos el tutorial de hoy. Recuerda que en este caso fue de la tabla personas, pero funciona igual para todas las tablas.

Inner join y otras uniones de tablas en CodeIgniter

Introducción

En estos días tuve la inquietud de cómo hacer un inner join con 2 o más tablas utilizando el query builder de CodeIgniter. Y como ya he encontrado la solución, decidí reunir todas mis investigaciones para explicarlo. Vamos allá.

Hacer inner join de 2 tablas

Aquí dejo la solución. Sólo cambia el nombre de tus tablas y las condiciones como se deba. En este caso se unen 2 tablas.

 Inner join de 3 tablas

Ahora veamos cómo hacer un inner join de 3 tablas. Ya con este ejemplo podemos imaginar cómo podemos unir infinitas tablas.

Left, right, outer

No siempre vamos a querer un inner join, que es la opción por defecto. Podemos pasar un tercer argumento al llamar a join. Por ejemplo, para left es así:

Eso fue para left, pero el tercer argumento puede ser cualquiera de la lista de abajo.

Lista de opciones para unir tablas

  • left
  • right
  • outer
  • inner
  • left outer
  • right outer

Ejemplo

Para implementar esto en un modelo de CodeIgniter, podríamos hacerlo así:

Referencias

Si quieres saber más sobre el tema, aquí dejo el link de la documentación oficial:

Query Builder Class | CodeIgniter V3

Conclusión y notas

Es muy fácil hacer uniones de tablas de cualquier tipo utilizando este framework. Recuerda que el código de ejemplo, al menos como yo lo recomiendo, va dentro de un modelo. Y no olvides cargar la base de datos en dicho modelo con load->database() en el constructor.