En este post vamos a ver como podemos podemos crear las Entidades de nuestro modelo utilizando la consola de Symfony y conectarnos a la base de datos utilizando Doctrine
Configrando Doctrine en Symfony
Lo primero es configurar el acceso a la BD. Esto lo hacemos desde el archivo «app/config/parameters.yml»
En este archivo tendremos todos los parámetros de configuración de nuestra aplicación en nuestro entorno de desarrollo. Modificamos el fichero con los datos de nuestro usuario y base de datos de mysql. (Puedes crear un nuevo usuario de mysql solo para este proyecto o utilizar uno que ya tengas creado).
Por el momento solo vamos a modificar los parámetros referidos a la base de datos. Esto es un ejemplo de los campos que debemos editar, tendrás que poner los valores para tu entorno:
database_host: 127.0.0.1 database_port: null database_name: symfony database_user: root database_password: null
Creando la base de datos
Una vez editado este fichero de configuración ya podemos crear la base de datos.
Por supuesto que la base de datos la podríamos crear a mano, pero ya que estamos utilizando Symfony voy a utilizar la aplicación de consola que trae Symfony, así de paso comprobamos si hemos configurado bien la conexión. El comando para crear la base de datos sería el siguiente:
bin/console doctrine:database:create
(En versiones anteriores , la consola no está en el directorio «bin», si no en el directorio «app»)
Yo, en mi archivo de configuración le he llamado «wordwar» a la base de datos, y el comando anterior me dice que la ha creado correctamente
"Created database `wordwar` for connection named default"
por lo tanto ya sé que he configurado correctamente la conexión.
Inciso: Organizando la aplicación en Bundles
La instalación por defecto de Symfony creará y configurará por defecto un Bundle llamado AppBundle. En una aplicación sencilla como esta podríamos meter todo nuestro código directamente en ese bundle, pero mejor vamos a crear nuestro propio Bundle y así introducimos este concepto que es una de las claves de la potencia de Symfony.
A mi bundle le llamarñe WWBundle (de WordWarBundle) y para crearlo tenemos el comando:
bin/console generate:bundle
Nos preguntará el nombre del bundle,el directorio (voy a utilizar el directorio por defecto por defecto src) y que tipo de configuración queremos utilizar (yo utilizaré archivo .yml)
La salida de este comando nos explica que todos los pasos que se han ejecutado y los archivos que ha creado. Es interesante pararse a leer esta salida para entender un poco mejor como se estructuran los bundles, y cuales serian los pasos a seguir si tuviésemos que hacer este proceso de forma manual.
Yo destacaría varios puntos:
- El comando ha creado la estructura básica de nuestro bundle
- Ha creado un directorio de tests
- Ha creado los archivos de configuración de rutas y servicios
- Ha registrado nuestro bundle en el kernel de la aplicación
Iremos viendo en siguientes posts que significa todo esto, pero por el momento nos basta con saber que tenemos nuestro bundle configurado y funcionando, y que ya podemos empezar a crear nuestras entidades dentro de este bundle sin tener que hacer ninguna otra configuración.
Si volvemos a acceder a nuestra aplicación a través del navegador veremos que la página ha cambiado y simplemente muestra un «Hello World!» Esto es por que ahora el controlador por defecto es el de nuestro Bundle (WWBundle), y no el de AppBundle. Lo vamos a dejar así por el momento. Ya que intentaré retrasar lo máximo posible la programación del frontend.
Commit!
Este puede ser un buen momento para hacer otro commit de nuestro proyecto
git add . git commit -m "Creates WWBundle"
Y así podremos seguir rompiendo cosas sin miedo
Vamos ahora con nuestra primera entidad/tabla
La entidad central de esta aplicación representará una palabra (word). Vamos a crearla desde la consola de Symfony, dentro de nuestro bundle «WWBundle»:
bin/console doctrine:generate:entity
Este comando nos pedirá el nombre de la entidad. la vamos a llamar «Word» por lo que su nombre completo sería «WWBundle:Word»
Tras darle un nombre el comando nos preguntará que propiedades tendrá nuestro modelo, vamos a darle inicialmente dos propiedades:
- name: una cadena de caracteres unica no nula
- description: un texto no nulo
No me convence demasado el nombre «name» para la propiedad que contendrá la palabra, pero prefiero no llamarle «word» para que no haya confusiones con el propio nombre de la clase «Word».
Como resultado de ejecutar el comando anterior obtenemos 3 nuevos ficheros en nuestro Bundle:
- Entity/Word.php : La entidad con sus propiedades, getters y setters
- Repository/WordRepository.php: El repo donde incluiremos todas las consultas a BD
- AppBundle/Resources/config/doctrine/Word.orm.yml: La configuración de nuestra entidad
Vamos a ver este último fichero .yml. En el se definen las características de la entidad Word.
AppBundle\Entity\Word: type: entity table: null repositoryClass: AppBundle\Repository\WordRepository id: id: type: integer id: true generator: strategy: AUTO fields: name: type: string length: '150' unique: true description: type: text lifecycleCallbacks: { }
Este fichero es el que modificaremos en un futuro en caso de querer modificar las propiedades a nuestra entidad.
En este punto ya tenemos nuestra entidad Word creada pero todavía no tenemos forma de persistirla en la BD, de hecho todavía no tenemos creada la tabla para almacenar nuestras palabras . Esta parte la veremos en el siguiente post.
Commit!
git add . git commit -m "Ads Word Entity"