doctrine symfony

27
TRABAJO CON BASE DE DATOS: DOCTRINE Trabajaremos con anotaciones (podríamos optar también por ficheros yml, php o xml). El primer paso es configurar la base de datos (recordar que durante la instalación de Symfony se establecieron los parámetros 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 (ingeniería inversa). Pero vamos a hacerlo a la inversa, creando las clases y posteriormente el modelo relacional.

Upload: rmirandaibanez

Post on 11-Apr-2017

176 views

Category:

Data & Analytics


1 download

TRANSCRIPT

Page 1: Doctrine symfony

TRABAJO CON BASE DE DATOS: DOCTRINE

Trabajaremos con anotaciones (podríamos optar también por ficheros yml, php o xml).

El primer paso es configurar la base de datos (recordar que durante la instalación de Symfony se establecieron los parámetros 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 (ingeniería inversa). Pero vamos a hacerlo a la inversa, creando las clases y posteriormente el modelo relacional.

Page 2: Doctrine symfony

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:

Page 3: Doctrine symfony

Y si volvemos a abrir la clase Blog.php observamos que se han creado automáticamente los setters y los getters.

El siguiente paso es generar la ruta:

Page 4: Doctrine symfony

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).

Page 5: Doctrine symfony

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 también el paquete Fixtures, introducimos estas dos líneas en composer.json:

Actualizamos:

Ahora tenemos que tener también los paquetes “fixtures”:

Page 6: Doctrine symfony

Lo siguientes es registrar los paquetes en el appkernel.

Introducimos estas tres líneas:

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

Page 7: Doctrine symfony

Y lo llevamos a la carpeta (creada previamente):

Hay que modificar la clase BlogFixtures.php para añadir dos nuevos “uses”, extender la clase de AbstractFixture y modificar el parámetro 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 aún le falta la imagen:

Page 8: Doctrine symfony

Tras añadir imágenes a la carpeta /web/images, y modificar el archivo screen.css en la carpeta css (que ya teníamos 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:

Page 9: Doctrine symfony

Introducimos este constructor y función para que la aplicación la ejecute antes de hacer persistentes los datos en la base de datos (@ORM\PreUpdate):

Y volvemos a cargar los datos:

Page 10: Doctrine symfony

A continuación tenemos que cambiar el index del Page (Blogger/BlogBundle/Resources/views/Page/index.html.twig) para poder mostrar todas las entradasen la página principal.

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

Page 11: Doctrine symfony

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

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

Esto sirve para poder determinar o limitar el número 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 parámetro la longitud de la entrada.

Page 12: Doctrine symfony

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:

Page 13: Doctrine symfony

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

Page 14: Doctrine symfony

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.

Page 15: Doctrine symfony

Y en la entidad Blog:

php bin/console doctrine:generate:entities Blogger

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

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

Page 16: Doctrine symfony

Y veremos que se ha generado automáticamente 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 después hacer un load.

Page 17: Doctrine symfony

Añadiendo al final también:

Page 18: Doctrine symfony

Ahora en la clase CommentRepository.php (creada automaticamente) añadimos:

Ahora en BlogController.php cambiamos:

Page 19: Doctrine symfony

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:

Page 20: Doctrine symfony

Ahora vamos a implementar la funcionalidad para añadir 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 añadimos una nueva ruta:

Page 21: Doctrine symfony

Ahora tenemos que crear el CommentController.php:

Nota: Los parámetros de this→createForm en funcion createAction deben ser igual que en newAction.

Page 22: Doctrine symfony

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:

Page 23: Doctrine symfony

Y ya podemos añadir comentarios:

Podemos hacer que la vista de cada entrada en el home ofrezca info relativa al número de comentarios que tiene esta entrada, e incluso convertir ese número 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 <a> 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, añadimos el texto de la etiqueta <a>, que será la longitud del array de comentarios.

Page 24: Doctrine symfony

Ahora vamos a implementar la barra lateral. Para ello añadimos en BlogRepository.php:

Y también:

Ahora vamos al PageController.php y añadimos:

Page 25: Doctrine symfony

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:

Page 26: Doctrine symfony

Finalmente tenemos:

Ahora para añadir a la barra lateral los comentarios más recientes tenemos que hacer lo siguiente:

Añadimos en el CommentRepository.php:

Ahora vamos al PageController.php y modificamos el sidebarAction:

Page 27: Doctrine symfony

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

En el sidebar.html.twig añadimos:

Y vemos que el blog ha cambiado: