doctrine symfony

Post on 11-Apr-2017

164 Views

Category:

Data & Analytics

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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.

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

Actualizamos:

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

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:

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:

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:

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:

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

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.

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 métodos 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 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.

Añadiendo al final también:

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

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 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:

Ahora tenemos que crear el CommentController.php:

Nota: Los parámetros de this→createForm 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 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.

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:

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 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:

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

En el sidebar.html.twig añadimos:

Y vemos que el blog ha cambiado:

top related