Doctrine symfony

download Doctrine symfony

of 27

Embed Size (px)

Transcript of Doctrine symfony

  • TRABAJO CON BASE DE DATOS: DOCTRINE

    Trabajaremos con anotaciones (podramos optar tambin por ficheros yml, php o xml).

    El primer paso es configurar la base de datos (recordar que durante la instalacin de Symfony se establecieron los parmetros por defecto), en la ruta:

    El siguiente paso es crear una base de datos para el proyecto, se puede hacer desde phpmyadmin o desde consola:

    Symfony permite crear las clases a partir del modelo relacional (ingeniera inversa). Pero vamos a hacerlo a la inversa, creando las clases y posteriormente el modelo relacional.

  • Tenemos que crear la entidad Blog.php dentro de la carpeta Entity:

    Y ahora para crear el esquema en base a esa clase:

    Y observamos que se ha creado la tabla:

  • Y si volvemos a abrir la clase Blog.php observamos que se han creado automticamente los setters y los getters.

    El siguiente paso es generar la ruta:

  • Vamos a crear un nuevo controlador, de manera que trabajaremos con un controlador para cada entidad:

    El siguiente paso, una vez mas, es crear la vista, en la carpeta Resources/views/Blog (previamente creada).

  • El siguiente paso es instalar el paquete de Doctrine DataFixtures, para poder finalmente persistir datos en la base de datos, donde introduciremos las diferentes entradas de la base de datos. Para ello:

    Hay que instalar tambin el paquete Fixtures, introducimos estas dos lneas en composer.json:

    Actualizamos:

    Ahora tenemos que tener tambin los paquetes fixtures:

  • Lo siguientes es registrar los paquetes en el appkernel.

    Introducimos estas tres lneas:

    Ahora tenemos que aadir los accesorios (datos). Para ellos creamos el fichero BlogFixtures.php:

  • Y lo llevamos a la carpeta (creada previamente):

    Hay que modificar la clase BlogFixtures.php para aadir dos nuevos uses, extender la clase de AbstractFixture y modificar el parmetro recibido por la funcion load:

    Si todo ha ido bien al ejecutar este comando para cargar los datos se recibir el siguiente mensaje:

    Ahora probamos a introducir en la URL del navegador:

    Tras esto volvemos a cargar esa URL y veremos que entramos en un post con contenido al que an le falta la imagen:

  • Tras aadir imgenes a la carpeta /web/images, y modificar el archivo screen.css en la carpeta css (que ya tenamos creada anteriormente), el resultado es el siguiente:

    Ahora hay que modificar el archivo Blog.php, para registrar sellos temporales del momento de la persistencia en la base de datos:

  • Introducimos este constructor y funcin para que la aplicacin la ejecute antes de hacer persistentes los datos en la base de datos (@ORM\PreUpdate):

    Y volvemos a cargar los datos:

  • A continuacin tenemos que cambiar el index del Page (Blogger/BlogBundle/Resources/views/Page/index.html.twig) para poder mostrar todas las entradasen la pgina principal.

    Vamos ahora al PageController (Blogger/BlogBundle/Controller/PageController.php):

  • Ahora vemos que en nuestra home se enumeran todas las entradas.

    Ahora vamos a la entidad Blog (Blog.php), vemos que la funcin getBlog devuelve blog. Tenemos que modificarlo de la siguiente manera:

    Esto sirve para poder determinar o limitar el nmero de caracteres de cada entrada que sacamos en el listado del home.Tras esto volvemos a la plantilla index.html.twig, y en la llamada a la entidad Blog podemos pasarlecomo parmetro la longitud de la entrada.

  • Ahora vamos a separar la consulta doctrine del controlador, para poder reutilizarla en cualquier momento sin tener que acceder al controlador. Para ello trabajaremos con repositorios, un script donde pondremos todas las consultar doctrine.

    Dentro de la carpeta Entity creamos una carpeta Repository y dentro creamos BlogRepository.php con el siguiente contenido:

  • Y ahora cambiamos en el PageController la consulta por una llamada al repositorio:

  • Ahora vamos a trabajar los comentarios. Como un comentario es de un blog pero un blog tiene muchos comentarios esto se trabaja con anotaciones. En primer lugar creo la entidad Comment en lacarpeta Entity.

  • Y en la entidad Blog:

    php bin/console doctrine:generate:entities Blogger

    Tras esto me ha debido crear todos los mtodos de acceso en la clase Comment.

    Hacemos persistentes las clases en la base de datos, lo haremos con migraciones.

  • Y veremos que se ha generado automticamente la tabla de comentarios en nuestra base de datos:

    Lo siguiente es cargar los comentarios. Para ello tenemos que llevarnos el fichero a DataFixtures y despus hacer un load.

  • Aadiendo al final tambin:

  • Ahora en la clase CommentRepository.php (creada automaticamente) aadimos:

    Ahora en BlogController.php cambiamos:

  • Ahora cambiamos la plantilla show.html.twig:

    Creamos en la carpeta views otra carpeta llamada Comment, con un archivo index en su interior conel siguiente contenido:

    Y ya podremos ver los comentarios en cada entrada:

  • Ahora vamos a implementar la funcionalidad para aadir comentarios. Para esto tenemos que generar un formulario con Doctrine.

    Se debe haber creado la clase con el siguiente contenido:

    Necesitaremos un controlador para manejar este formulario. Para ello aadimos una nueva ruta:

  • Ahora tenemos que crear el CommentController.php:

    Nota: Los parmetros de thiscreateForm en funcion createAction deben ser igual que en newAction.

  • Ahora creamos la vista form.html.twig en la ruta especificada:

    Ahora creamos la vista create.html.twig:

    Ahora hay que modificar el show.html.twig:

  • Y ya podemos aadir comentarios:

    Podemos hacer que la vista de cada entrada en el home ofrezca info relativa al nmero de comentarios que tiene esta entrada, e incluso convertir ese nmero en un enlace que nos lleve directamente a esos comentarios en la entrada. Para ello tenemos que modificar el index.html.twig del views/Page:

    Vemos como dentro del href de la etiqueta indicamos la ruta de la entrada del blog e incluso con #comments indicamos que el navegador haga scroll vertical hasta llegar a la zona de los comentarios. Posteriormente, aadimos el texto de la etiqueta , que ser la longitud del array de comentarios.

  • Ahora vamos a implementar la barra lateral. Para ello aadimos en BlogRepository.php:

    Y tambin:

    Ahora vamos al PageController.php y aadimos:

  • Creamos sidebar.css en web/css con el siguiente contenido:

    Creamos en Resources/views/Page el sidebar.html.twig:

    Y por ltimo en el layout.html.twig:

  • Finalmente tenemos:

    Ahora para aadir a la barra lateral los comentarios ms recientes tenemos que hacer lo siguiente:

    Aadimos en el CommentRepository.php:

    Ahora vamos al PageController.php y modificamos el sidebarAction:

  • Ahora en el config.yml (dentro de app/config/) incluimos:

    En el sidebar.html.twig aadimos:

    Y vemos que el blog ha cambiado: