¡Aprende a programar 1 agenda CSV con PHP!

Hoy empezamos una serie de ejercicios muy prácticos que tiene como objetivo desarrollar una aplicación real, ¡una agenda PHP!

Para centrar el foco, de momento nuestra agenda solo gestionará personas, pero ya verás que, una vez asimilados los fundamentos, será muy fácil extenderla para que puedas gestionar otras cosas que tú necesites: eventos, aniversarios, etc.

Agenda

Archivos CSV

Vamos a persistir los datos en archivos CSV:

name,surname,email
Marta,González,marta@hotmail.com
Luis,Martín,luis@gmail.com
Antonio,García,antonio@gmail.com
Carlos,Lobato,cjl@hotmail.com

Como ves, no utilizaremos ninguna base de datos, sino que nos apoyaremos en las funciones nativas de PHP para gestionar archivos y ficheros CSV.

Estructura de carpetas de la app

Figura 1. Estructura de carpetas de la app

  • assets/bootstrap contiene el conocido framework HTML, CSS y JS Bootstrap.
  • data/people.csv contiene el archivo CSV con los datos de las personas.
  • agenda/people contiene las operaciones de gestión de datos de las personas: creación, lectura, edición y borrado de datos.
  • vendors/AgendaPHPGuay es el componente Agenda programado por nosotros.
  • views son vistas parciales, fragmentos de código HTML reutilizables, para no repetir el mismo código HTML en varias partes.

Esta estructura es solo una idea, no estás obligado a seguirla siempre que tengas que desarrollar una nueva aplicación.

Pensar en CRUD

Para desarrollar este panel de gestión con garantías de éxito tenemos que aplicar algunas ideas de análisis de aplicaciones; de lo contrario, el código se terminará liando y liando, hasta que llegará un momento donde será muy difícil hacer cambios y mantener el código.

Una de estas ideas consiste en centrar la construcción del panel en los objetos que éste gestiona, junto con las operaciones que se llevan a cabo sobre dichos objetos. A esta idea de desarrollo la llamamos pensar en CRUD. ¡Si nunca has pensado en CRUD te recomiendo que eches un vistazo al siguiente video!

Como resultado, terminamos creando la carpeta agenda/people con los archivos que implementan el CRUD, tal y como puedes ver en la Figura 1.

A modo de ejemplo adjunto ahora el contenido del archivo agenda/people/add.php pero recuerda que puedes acceder al código completo en el repositorio PHPGuay de GitHub.

<?php
// Ejecutamos la lógica de arranque de la app, o lógica de bootstrap
require '../vendors/AgendaPHPGuay/People.php';
use \AgendaPHPGuay\People;
// Si es una petición POST...
if($_POST)
{    
    // Añadimos el nuevo contacto en la agenda
    People::getInstance(__DIR__ . "/../data/people.csv")
        ->add($_POST)
        ->write();
    // Redireccionamos a la home
    header('Location: /agenda/people/list.php ');
    exit;
}
// Si no es una petición POST, atendemos a petición GET...
?>
<!DOCTYPE html>
<html lang="es">
    <?php include '../views/head.php'; ?>
    <body>
        <div class="container-narrow">
            <div class="masthead">
                <h3 class="muted">Agenda PHP guay</h3>
            </div>
            <div class="jumbotron">                
                <a class="btn btn-large btn-success" href="list.php"><< Volver atrás</a>
            </div>
            <hr/>
            <h3>Añadir contacto</h3>
            <form role="form" method="post">                                   
                <div class="form-group">
                    <label for="name">Nombre:</label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="Escribe un nombre..." required>
                </div>
                <div class="form-group">
                    <label for="surname">Apellido:</label>
                    <input type="text" class="form-control" id="surname" name="surname" placeholder="Escribe un apellido..." required>
                </div>
                <div class="form-group">
                    <label for="email">Email:</label>
                    <input type="email" class="form-control" id="email" name="email" placeholder="Escribe un email..." required>
                </div>                
                <button type="submit" class="btn btn-default">Guardar contacto</button>
            </form>
            <hr/>
            <?php include '../views/footer.php'; ?>
        </div> <!-- /container -->
        <script src="../assets/bootsrap/js/bootsrap.min.js"></script>
    </body>
</html>

Es importante que veas los vídeos para entender bien todo lo anterior, y que te descargues y estudies por tu cuenta el código de la agenda. ¡No te pierdas las próximas entregas!