Grupo

Autores del Blog:
Armando Matos
Giorys Gonzalez
Wilmer Hernadez

lunes, 22 de junio de 2015

Mi primer proyecto con Symfony

Luego de ver que es Symfony e instalarlo, colocaremos los pasos para crear un proyecto con Symfony.

Antes que nada, es imporatante entender como estructura Symfony el código. Todo proyecto creado por Symfony consta de una serie de carpetas y archivos que contienen el código base del framework. El árbol de carpetas de un proyecto es:



Los proyectos se encuentran divididos en aplicaciones y módulos, los cuales, suelen coincidir con las tablas de nuestra base de datos. En este primer proyecto, haremos un blog muy simple y le pondremos el nombre blog (para ser original), a su vez, estará formado por dos aplicaciones, el frontend (o la parte visible para los usuarios comunes) y el backend (el panel de administración). Por último, cada una de las aplicaciones tendrá dos modulos: post y comment:


Base de datos del proyecto

Para la base de datos de este primer proyecto, crearemos un modelo muy simple que constará de una tabla de posts y una tabla de comentarios con una relación 1:n, puesto que un post puede tener n comentarios.




Creando el proyecto

Una vez tenemos clara la definición de la base de datos, las aplicaciones y los módulos del proyecto, podemos empezar a dar forma a nuestro código.

  1. El primer paso será crear mediante el script que nos proporciona Symfony, un proyecto vacío, para ello, creamos una carpeta blog en, por ejemplo, /var/www/ y ejecutamos symfony generate:project <project>:

        mkdir -p /var/www/blog/    cd /var/www/blog/
        symfony generate:project blog


        Esto nos habrá creado todo el árbol de directorios y archivos necesarios para poner en marcha nuestra web con este framework.

        NOTA!! Dependiendo del sistema operativo y de la instalación realizada, puede ser necesario utilizar el prefijo php antes de cada comando symfony (por ejemplo: > php symfony new blog).

  2.  Ahora, le pediremos a Symfony que nos genere las dos aplicaciones definidas anteriormente: frontend y backend

    symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend    symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret backend

        Al llamar a la tarea generate:app, también hemos pasado dos opciones relacionadas con la seguridad:

    • escaping-strategy: Permite escapar la salida para evitar ataques XSS
    • csrf-secret: Permite tokens de sesión en los formularios para prevenir los ataques CSR
  3. El siguiente paso, será conectar nuestra aplicación con la base de datos, para ello, Symfony dispone de un archivo de configuración /var/www/blog/config/databases.yml en el que le indicaremos donde está localizada, a que base de datos y con que usuario y contraseña lo deberá hacer.Para este caso, daremos por hecho que la base de datos es MySQL, se encuentra en la máquina local y que estará codificada en utf8. Abrimos el archivo y modificamos los valores que pongo en negrita:

                 all:
             propel:
             class: sfPropelDatabase
             param:
             classname: PropelPDO
             dsn: mysql:dbname=DB-NAME;host=localhost
             username: DB-USER
             password: DB-PASSWORD
             encoding: utf8
             persistent: true
             pooling: true


    Con esto, ya tenemos configurado nuestro proyecto con la base de datos!!

  4. Una vez definida la conexión con la base de datos, creamos en el archivo /var/www/blog/config/schema.yml el esquema de la base de datos que representa el modelo de datos del proyecto:

        propel:
          post:
            _attributes:   { phpName: Post }
            id:
            title:         varchar(255)
            excerpt:       longvarchar
            body:          longvarchar
            created_at:
            updated_at:
          comment:
            _attributes:   { phpName: Comment }
            id:
            post_id:
            author:        varchar(255)
            email:         varchar(255)
            body:          longvarchar
            created_at:
            updated_at:


        Symfony, permite insertar una serie de opciones o atributos en su esquema de la base de datos, como por ejemplo phpName, que indica el nombre de la clase PHP utilizada para manejar cada tabla, además de ser capaz de deducir información del typo de campo a partir del nombre de la columna. Si por ejemplo una columna se llama id, salvo que se le indique lo contrario, Symfony supone que es la clave primaria de la tabla y, por tanto, que es de tipo entero, que no puede tomar valores null y que su valor se autoincrementa.

  5.  Ahora que tenemos definido el esquema, ejecutamos el comando propel:build-model para generar en la carpeta /var/www/blog/lib/model las clases que se encargan de manejar la base de datos

        symfony propel:build-model

     NOTA!! Si en este punto, aparece un error “Could not perform XLST transformation. Make sure PHP has been compiled/configured to support XSLT.” es debido a que no tienes instalada la extensión xsl para PHP. Desde Ubuntu puedes instalarla con sudo apt-get instal php5-xsl

  6.  Ya estamos listos para decirle a symfony que nos genere el script de creación de base de datos y lanzarlo:  symfony propel:build-sql  mysql -u DB-USER -p DB-NAME < /var/www/blog/data/sql/lib.model.schema.sql

     Nota!! Si antes de empezar el proyecto Symfony ya dispones de una base de datos, puedes hacer el trabajo inverso: generar el esquema y las clases PHP a partir de una base de datos existente.

  7. Nos vamos a nuestro navegador y visitamos la dirección http://localhost/blog/,si todo ha ido bien, deberíamos estar viendo una página similar a esta:





No hay comentarios:

Publicar un comentario