lunes, 5 de octubre de 2015

Symfony CRUD create views, controller and more / Crear vistas, controladores y mas a partir de una entidad


Fuente: http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

Symfony nos ayuda con la creación de view, controller, form.

Una vez que tenemos nuestras entities creadas podemos crear todo lo demás.


$ php app/console generate:doctrine:crud

Nos va dando una serie de instrucciones, la seguimos y generamos para cada una de nuestras entities.

Ejemplo:
En mi AppBundle tengo una entity Usuario

1. Corro el comando
$ php app/console generate:doctrine:crud
2.
The Entity shortcut name: AppBundle:Usuario
3.
By default, the generator creates two actions: list and show.
You can also ask it to generate "write" actions: new, update, and delete.

Do you want to generate the "write" actions [no]?yes (quiero que me genere el new, update y delete)
4.
Configuration format (yml, xml, php, or annotation) [annotation]: annotation 

5.
Routes prefix [/usuario]:/usuario
6.
Do you confirm generation [yes]? yes

Si navegamos en nuestro proyecto veremos en view, form y demás los archivos creamos, en este ejemplo si escribimos en el browser la ruta de nuestro proyecto y /web/app_dev.php/usuario/ veremos lo que contiene usuario, si no tenemos ningún registro podemos crear uno y si ya tenemos podemos editar y borrar.

Symfony crear base de datos a partir de entidades / Create database from Entity Class


Documentación en: http://symfony.com/doc/current/book/doctrine.html
Instalar symphony
Crear base de datos

$ app/console doctrine:database:create

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Primero crear las clases o entities y luego generar las tablas de la base de datos

// src/AppBundle/Entity/Product.php
namespace AppBundle\Entity;

class Product
{
    protected $name;
    protected $price;
    protected $description;
}

Crear entities completas desde consola

$php app/console doctrine:generate:entity

Para crear la base

$php app/console doctrine:schema:update --force

Si tenemos un error de No Metadata Classes to process debemos asegurarnos que este seteada en el config, borra la app/cache despues de realizar este cambio

# app/config/config.php
doctrine:
    orm:
        # ...
        mappings:
            AppBundle:
                type: annotation
                is_bundle: false
                dir: %kernel.root_dir%/../src/AppBundle/Entity
                prefix: AppBundle\Entity
                alias: AppBundle


Para añadir relaciones

Ejemplo:
Relación de Categoria - Producto de 1 a muchos

En la clase de Categoria añadimos

/**
     * @ORM\OneToMany(targetEntity="Producto", mappedBy="categoria")
     */
    protected $productos;

    public function __construct()
    {
        $this->productos = new ArrayCollection();
    }


En la clase Producto añadimos


    // ...

    /**
     * @ORM\ManyToOne(targetEntity="Categoria", inversedBy="producto")
     * @ORM\JoinColumn(name="categoria_id", referencedColumnName="id")
     */
    protected $categoria;


Una vez realizados todos los cambios de many to one y one to many en las entities corremos

$php app/console doctrine:generate:entities AppBundle
$php app/console doctrine:schema:update --force

para actualizar los cambios realizados.