DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
¡Actualizado el 12-10-2017!

En esta entrada veremos ciertas estructuras, esquemas y funciones que tal vez no conocías o que a veces podemos pasar por alto pero que de una forma u otra forman parte de CodeIgniter y que pueden ser de gran utilidad.

Verificar si un archivo existe y mostrar el error 404 de CodeIgniter

En muchos escenarios nos puede interesar mostrar una ventana de 404 personalizada de nuestra aplicación; ya sea porque el usuario no ingresó un Identificador, una función no válida, parámetro incorrecto, para proteger ciertos recursos de un usuario con los privilegios innecesarios etc; para ello existe la función show_404().

if ( ! file_exists('application/views/'.$page.'.php')) { 
// no existe la pagina
show_404(); 
} 
// resto del codigo...

En resumen; si la página no existe se mostrará la página de 404 de CodeIgniter, caso contrario cualquier otro elemento, validación, proceso, etc que tengamos configurado.

file_exists() función nativa de PHP para verificar si el archivo existe
show_404() función interna de CodeIgniter que presenta la página de error 404 por defecto.

URL amigables en base a un texto con CodeIgniter

$title = "What's wrong with CSS?";
$url_title = url_title($title);
// Produce: Whats-wrong-with-CSS

La función anterior toma un texto, reemplazando todos los espacios por guiones (-), establece todos los caracteres estén minúsculas y elimina todos los caracteres especiales; Esto permite crear URIs amigables para el SEO sin mayor esfuerzo.

Puedes obtener más información sobre la función en la documentación oficial CodeIgniter URL Helper.

Controladores en subcarpetas según el esquema de tu proyecto

CodeIgniter mantiene un esquema muy personalizable en nuestros proyectos al poder crear tantos subcarpetas como queramos para nuestros controladores, vistas y hasta modelos, al contrario de otros frameworks que pueden ser más complicada dicha maniobras de este tipo de organizaciones por parte del usuario.

Para organizar los controladores en subcarperas simplemente cree carpetas dentro de de la carpeta padre application/controllers y ubique sus clases controlador dentro de ellas.

Al usar esta funcionalidad, el primer segmento de la URI tiene que especificar la carpeta. Por ejemplo, digamos que tiene un controlador ubicado aquí: application/controllers/subcarpeta/controlador.php Para llamar al controlador anterior, su URI lucirá como esto:

ejemplo.com/index.php/subcarpeta/controlador/accion/12345 

Cargar múltiples librerías, modelos, helper, etc en una sola línea:

Se pueden cargar varias bibliotecas. librerías, helpers al mismo tiempo al pasar un array de los elementos que deseamos cargar; por ejemplo, para cargar múltiples librerías tenemos:

$this->load->library(array('email', 'session')); 

html_escape() para sanear datos de usuarios

Esta función forma parte del API de HTML y permite reemplazar los caracteres de apertura y cerrado de las etiquetas HTML Tabla de Códigos HTML.

Generando y descomprimiendo archivos Zip

Generar archivos Zip de archivos ya alojados en nuestro servidor es muy fácil con CodeIgniter; para ello empleamos el método read_file() provisto por la librería zip de Codeigniter que importamos de la siguiente manera:

$this->load->library('zip');

Luego de esto empleamos el método read_file() para ir agregando uno por uno los archivos que queremos importar el el zip de la siguiente manera:

$path = "uploads/$document->document_id/dismissal/$document->dismissal";
$path_zip = "$document->document_id/dismissal/$document->dismissal";
$this->zip->read_file($path, $path_zip);

Es recomendable verificar si el archivo existe antes de agregar el mismo al zip; para ello podemos emplear el método file_exits() provisto por PHP:

$path = "uploads/$document->document_id/dismissal/$document->dismissal";
if (file_exists($path)) {
    $path_zip = "$document->document_id/dismissal/$document->dismissal";
    $this->zip->read_file($path, $path_zip);
}

Hasta el momento solo hemos agregado un solo archivo a nuestro zip, pero podemos agregar los que queramos usando nuevamente el método read_file tantas veces como archivos queramos incluir:

//forewarning
$path = "uploads/$document->document_id/forewarning/$document->forewarning";
if (file_exists($path)) {
    $path_zip = "$document->document_id/forewarning/$document->forewarning";
    $this->zip->read_file($path, $path_zip);
}

Cuando ya no queremos agregar más documentos, empleamos el siguiente método

$this->zip->download('my_archive.zip');

En donde my_archive.zip es el nombre de nuestro zip.

Cargar y descomprimir el zip

Para la carga del zip podemos emplear el esquema tradicional en CodeIgniter; el siguiente código realiza la carga y posterior descompresión del ZIP en la carpeta uploads disponible en la raíz del servidor:

    private function subir_zip() {

        $dir = 'uploads/';
        $tag = 'zip';
        if (!is_dir($dir)) {
            mkdir($dir, 0755, TRUE);
        }

        // preparo los parametros para la subida de la foto

        $config['upload_path'] = $dir;
        $config['allowed_types'] = "zip";
//        $config['max_size'] = "100000";
        $config['file_name'] = 'backup';
        $config['overwrite'] = TRUE;

        // carga modelos, helper y vistas
        $this->load->library('upload', $config);

        // ocurrio un error
        if (!$this->upload->do_upload($tag)) {

            $data['uploadError'] = $this->upload->display_errors();
            $this->session->set_flashdata('messageError', $this->upload->display_errors());
            echo $this->upload->display_errors();
            return;
        }

        // informacion hacerca de la subida
        $data = $this->upload->data();
        $full_path = $data['full_path'];

        $zip = new ZipArchive;

        if ($zip->open($full_path) === TRUE) {
            $zip->extractTo(FCPATH . '/uploads/');
            $zip->close();
        }

        $this->session->set_flashdata('tipo_m', 'info');
        $this->session->set_flashdata('text', 'Carga y descompresión del zip realizado con éxito');

        redirect("/redirect");
    }

Puedes obtener más información sobre la librería zip en la documentación oficial: Zip Encoding Class.

Conclusión

Las estructuras, esquemas y funciones que vimos anteriormente son solo algunas de los elementos que debemos conocer para trabajar con CodeIgniter y se irán agregando otros elementos en un futuro cercano.


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

API REST en CodeIgniter

API REST en CodeIgniter

Algunos artículos que te pueden interesar

Upload de archivos con Codeigniter

Upload de archivos con Codeigniter

En este artículo veremos como hacer un uploads o cargar archivos en CodeIgniter.

Andrés Cruz 28-04-2014

Cargar de archivos con Codeigniter y Dropzone

Cargar de archivos con Codeigniter y Dropzone

Se explica cómo realizar la carga de archivos en CodeIgniter empleando el plugin Dropzone, manejo de eventos, errores y parámetros de configuración.

Andrés Cruz 21-08-2017

Elementos fundamentales para trabajar con CodeIgniter

Elementos fundamentales para trabajar con CodeIgniter

Hablaremos de las funciones show_404 para mostrar errores 404 personalizados,url_title para crear URIs limpias,html_escape para evitar la inyección de HTML, organizar los controladores en subcarpeta, como cargar múltiples librerías y/o helpers en una sola

Andrés Cruz 12-10-2017