symfony2 y mongodb - desymfony 2012

92
Saturday, June 16, 2012

Upload: pablo-godel

Post on 18-May-2015

6.110 views

Category:

Technology


2 download

DESCRIPTION

MongoDB es un motor de base de datos NoSQL que ha ganado mucha popularidad en los últimos tiempos, ya que ofrece muchos beneficios a la hora de desarrollar aplicaciones web. En esta charla daremos una breve introducción a su instalación, configuración y funcionamiento. Luego repasaremos las distintas alternativas a la hora de usarlo en nuestras aplicaciones desarrolladas con PHP y Symfony2, y explicaremos cómo puede incrementar la velocidad de desarrollo y ayudar con aplicaciones web de alto rendimiento.

TRANSCRIPT

Page 1: Symfony2 y MongoDB - deSymfony 2012

Saturday, June 16, 2012

Page 2: Symfony2 y MongoDB - deSymfony 2012

Saturday, June 16, 2012

Page 3: Symfony2 y MongoDB - deSymfony 2012

¿Quién soy?

⁃ Argentino viviendo en Estados Unidos desde 1999⁃ Desarrollador PHP & Symfony

⁃ Fundador de la primera lista de discusión de PHP de habla hispana

- Socio fundador de ServerGrove ⁃ Maestro de la parrilla

Saturday, June 16, 2012

Page 4: Symfony2 y MongoDB - deSymfony 2012

Saturday, June 16, 2012

Page 5: Symfony2 y MongoDB - deSymfony 2012

Saturday, June 16, 2012

Page 6: Symfony2 y MongoDB - deSymfony 2012

⁃ Fundada en 2005

⁃ Proveedor de servicios de hosting especializado en PHP, Symfony, ZendFramework, y otros

⁃ Servidores en Europa y Estados Unidos

⁃ Mongohosting.com en beta!

ServerGrove!

Saturday, June 16, 2012

Page 7: Symfony2 y MongoDB - deSymfony 2012

⁃ Muy activos en la comunidad de Open Source contribuyendo con código o patrocinando eventos y grupos de usuarios

La comunidad es nuestra guia

Saturday, June 16, 2012

Page 8: Symfony2 y MongoDB - deSymfony 2012

Agenda

- Introducción a MongoDB- PHP y MongoDB- Librerías en PHP- Symfony2 y MongoDB

Saturday, June 16, 2012

Page 9: Symfony2 y MongoDB - deSymfony 2012

¿Qué es MongoDB?

¿Quién es 10Gen?

Saturday, June 16, 2012

Page 10: Symfony2 y MongoDB - deSymfony 2012

MongoMongo viene de "humongous". Usado para describir algo extremadamente grande o importante

Saturday, June 16, 2012

Page 11: Symfony2 y MongoDB - deSymfony 2012

MongoDB es una base de datos NoSQL, escalable, de alta performance

y de código abierto.

- BD orientada a documentos- Escrita en C++

- Disponible en *nux (Linux, Solaris, etc), Windows y OS X

- Muchos drivers (PHP, Java, Python, Ruby...)

Saturday, June 16, 2012

Page 12: Symfony2 y MongoDB - deSymfony 2012

- Documentos flexibles tipo JSON- Soporte completo de Indices- Queries complejos / Map Reduce- Framework de agregación (próximamente)- GridFS (almacena archivos nativamente)- Múltiples opciones de replicación- Sharding- Instalación sencilla con cero configuración

Descripción

Saturday, June 16, 2012

Page 13: Symfony2 y MongoDB - deSymfony 2012

Base de datos => Base de datosTabla => ColecciónFila => Documento

¿Vienes de SQL?

Orientada a Objetos

Saturday, June 16, 2012

Page 14: Symfony2 y MongoDB - deSymfony 2012

{ nombre: { primero: 'Juan', apellido: 'Perez' }, titulo: 'Ingeniero', edad: 40}

Documentos Tipo JSON

Saturday, June 16, 2012

Page 15: Symfony2 y MongoDB - deSymfony 2012

Sin Schema o Tablas Fijas

{ nombre: { primero: 'Juan', apellido: 'Perez' }, titulo: 'Ingeniero', edad: 40, escuela: 'UJI'}

Saturday, June 16, 2012

Page 16: Symfony2 y MongoDB - deSymfony 2012

{ "_id" : ObjectId("4ccba15ef597e9352e060000") "srcFilename" : "/etc/apache2/sites-enabled/example1.com", "vhostDirective" : { "directives" : [ { "name" : "CustomLog", "value" : "logs/example1.com-access_log combined" }, { "name" : "DocumentRoot", "value" : "/var/www/vhosts/example1.com/httpdocs" }, { "name" : "ServerName", "value" : "example1.com" } ] } }

Documentos Embebidos

Saturday, June 16, 2012

Page 17: Symfony2 y MongoDB - deSymfony 2012

{ "_id" : ObjectId("4cc4a5c3f597e9db6e010109"), "billingId" : NumberLong(650), "created" : ISODate("2010-10-24T21:31:47Z"), "servers" : [ { "$ref" : "server", "$id" : ObjectId("4cc4a5c4f597e9db6e050201") }], "users" : [ { "$ref" : "user", "$id" : ObjectId("4cc4a5c4f597e9db6e980201") }, { "$ref" : "user", "$id" : ObjectId("4cc4a5c4f597e9db6e9c0201") }] }

Referencias Entre Documentos

Saturday, June 16, 2012

Page 18: Symfony2 y MongoDB - deSymfony 2012

db.personal.ensureIndex({nombre: 1})

db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1})

db. personal.ensureIndex({edad: 0})

Indices

Saturday, June 16, 2012

Page 19: Symfony2 y MongoDB - deSymfony 2012

db.personal.ensureIndex({nombre: 1})

db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1})

db. personal.ensureIndex({edad: 0})

Indices

Saturday, June 16, 2012

Page 20: Symfony2 y MongoDB - deSymfony 2012

db.personal.ensureIndex({nombre: 1})

db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1})

db. personal.ensureIndex({edad: 0})

Indices

Saturday, June 16, 2012

Page 21: Symfony2 y MongoDB - deSymfony 2012

db. personal.find({nombre: 'Juan'})

db. personal.find({tags: 'symfony'})

db. personal.find({tags: {$in: ['symfony', 'PHP']}}

Consultas

Saturday, June 16, 2012

Page 22: Symfony2 y MongoDB - deSymfony 2012

db. personal.find({nombre: 'Juan'})

db. personal.find({tags: 'symfony'})

db. personal.find({tags: {$in: ['symfony', 'PHP']}}

Consultas

Saturday, June 16, 2012

Page 23: Symfony2 y MongoDB - deSymfony 2012

db. personal.find({nombre: 'Juan'})

db. personal.find({tags: 'symfony'})

db. personal.find({tags: {$in: ['symfony', 'PHP']}}

Consultas

Saturday, June 16, 2012

Page 24: Symfony2 y MongoDB - deSymfony 2012

- Archivos son divididos en “chunks” o partes y son guardados en múltiples documentos

- API transparente

GridFS

Saturday, June 16, 2012

Page 25: Symfony2 y MongoDB - deSymfony 2012

Source: http://www.mongodb.org/display/DOCS/Replication

Replicación

Saturday, June 16, 2012

Page 26: Symfony2 y MongoDB - deSymfony 2012

Source: http://www.mongodb.org/display/DOCS/Introduction

Shards

Saturday, June 16, 2012

Page 27: Symfony2 y MongoDB - deSymfony 2012

wget http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.0.4.tgz

tar zxvf mongodb-osx-x86_64-2.0.4.tgz

cd mongodb-osx-x86_64-2.0.4

./mongod

OS X

Simple instalación con cero configuración

Saturday, June 16, 2012

Page 28: Symfony2 y MongoDB - deSymfony 2012

/etc/yum.repos.d/10gen.repo

CentOS Linux

[10gen]name=10gen Repositorybaseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64gpgcheck=0

$ yum install -y mongo-stable-server$ service mongod start

Simple instalación con cero configuración

Saturday, June 16, 2012

Page 29: Symfony2 y MongoDB - deSymfony 2012

mongodumpmongodump -u usuario -p pass

Backups

mongorestoremongorestore -u usuario -p pass

mongoexportmongoexport -u usuario -p pass

mongoimportmongoimport -u usuario -p pass

Saturday, June 16, 2012

Page 30: Symfony2 y MongoDB - deSymfony 2012

Monitoreomongostat

Saturday, June 16, 2012

Page 31: Symfony2 y MongoDB - deSymfony 2012

http://localhost:28017/Monitoreo

Saturday, June 16, 2012

Page 32: Symfony2 y MongoDB - deSymfony 2012

¿Por qué MongoDB es bueno para el desarrollo rápido de

aplicacones web?

Saturday, June 16, 2012

Page 33: Symfony2 y MongoDB - deSymfony 2012

FLEXIBLE

by exfordy

Desarrollo Rápido de Aplicaciones

Sin schema / orientada a documentos

Saturday, June 16, 2012

Page 34: Symfony2 y MongoDB - deSymfony 2012

MIGRACIONES MAS FACILES

by exfordy

Desarrollo Rápido de Aplicaciones

Sin schema / orientada a documentos

Saturday, June 16, 2012

Page 35: Symfony2 y MongoDB - deSymfony 2012

Desarrollo Rápido de Aplicaciones

NO HAY JOINS!

Saturday, June 16, 2012

Page 36: Symfony2 y MongoDB - deSymfony 2012

VELOZ

by xavi talleda

Rendimiento

Saturday, June 16, 2012

Page 37: Symfony2 y MongoDB - deSymfony 2012

ESCALABILIDAD

by Jimee, Jackie, Tom & Asha

Rendimiento

Saturday, June 16, 2012

Page 38: Symfony2 y MongoDB - deSymfony 2012

- No hay transacciones- No hay rollbacks- Valores inseguros por defecto- Locks en Map Reduce

Ojo al piojo!

by Ernst Vikne

Saturday, June 16, 2012

Page 39: Symfony2 y MongoDB - deSymfony 2012

Buenas aplicaciones

- Sistema de manejo de contenidos (CMS)

- Catálogos de productos

- Análisis en tiempo real

- Almacenamiento de logs

Saturday, June 16, 2012

Page 40: Symfony2 y MongoDB - deSymfony 2012

y

Saturday, June 16, 2012

Page 41: Symfony2 y MongoDB - deSymfony 2012

Driver de PECL

pecl install mongoecho “extension=mongo.so >> /path/php.ini”

Linux

OS X

Windowshttps://github.com/mongodb/mongo-php-driver/downloads

http://php-osx.liip.ch/

Saturday, June 16, 2012

Page 42: Symfony2 y MongoDB - deSymfony 2012

<?php

// conectar$m = new Mongo();

// seleccionar una base de datos$db = $m->biblioteca;

// seleccionar una coleccón $collection = $db->libros;

// agregar un documento$obj = array( "titulo" => "RabbitMQ in Action", "autor" => "Alvaro Videla" );$collection->insert($obj);

// agregar otro documento con distintos datos$obj = array( "titulo" => "Desarrollo en Symfony", "pdf" => true );$collection->insert($obj);

// obtener todos los documentos en la colección$cursor = $collection->find();

// iterar los resultadosforeach ($cursor as $obj) {    echo $obj["titulo"] . "\n";}

?>

Uso

Saturday, June 16, 2012

Page 43: Symfony2 y MongoDB - deSymfony 2012

<?php

// guardar un archivo$id = $grid->storeFile("libro.pdf");$libro = $grid->findOne();

// agregar un contador de descargas$libro->file['descargas'] = 0;$grid->save($libro->file);

// incrementar el contador$grid->update(array("_id" => $id), array('$inc' => array("descargas" => 1)));

?>

Almacenamiento de Archivos

Saturday, June 16, 2012

Page 44: Symfony2 y MongoDB - deSymfony 2012

http://php.net/manual/es/mongo.sqltomongo.php

Queries de SQL a Mongo

Saturday, June 16, 2012

Page 45: Symfony2 y MongoDB - deSymfony 2012

Interfaces de Administración- Genghis

http://genghisapp.com/

Saturday, June 16, 2012

Page 46: Symfony2 y MongoDB - deSymfony 2012

- RockMongo

http://code.google.com/p/rock-php/wiki/rock_mongo

Interfaces de Administración

Saturday, June 16, 2012

Page 47: Symfony2 y MongoDB - deSymfony 2012

- php-mongodb-admin

https://github.com/jwage/php-mongodb-admin

Interfaces de Administración

Saturday, June 16, 2012

Page 48: Symfony2 y MongoDB - deSymfony 2012

- mongohosting.com

https://github.com/jwage/php-mongodb-admin

Interfaces de Administración

Saturday, June 16, 2012

Page 49: Symfony2 y MongoDB - deSymfony 2012

- Doctrine ODM

Librerias en PHP

Saturday, June 16, 2012

Page 50: Symfony2 y MongoDB - deSymfony 2012

- Doctrine ODM

- Mandango

Librerias en PHP

Saturday, June 16, 2012

Page 51: Symfony2 y MongoDB - deSymfony 2012

- Doctrine ODM

- Mandango

- varias más...

Librerias en PHP

Saturday, June 16, 2012

Page 52: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

http://doctrine-project.org

Doctrine MongoDB Object Document Mapper (ODM) está desarrollado para PHP 5.3.2+ y

provee persistencia transparente de objetos PHP.

Saturday, June 16, 2012

Page 53: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 54: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 55: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 56: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 57: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 58: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 59: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 60: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

bin_data_custombin_data_funcbin_data_md5bin_databin_data_uuidbooleandatefile

Tipos de Mappings

float hashidintkeystringtimestampincrement

Saturday, June 16, 2012

Page 61: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODM

Campos “AutoIncrement”<?php

/** Document */class MiClase{ /** @Id(strategy="INCREMENT") */ private $id;

public function getId() { return $this->id; }

//...}

Saturday, June 16, 2012

Page 62: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODMTipos propios<?php

namespace My\Project\Types;

use Doctrine\DBAL\Types\Type;use Doctrine\DBAL\Platforms\AbstractPlatform;

/** * My custom datatype. */class MyType extends Type{ public function convertToPHPValue($value) { // This is executed when the value is read from the database. Make your conversions here. }

public function convertToDatabaseValue($value) { // This is executed when the value is written to the database. Make your conversions here. }}

Saturday, June 16, 2012

Page 63: Symfony2 y MongoDB - deSymfony 2012

Doctrine MongoDB ODMMúltiples tipos en una misma colección/** * @Document(collection="documentos") * @DiscriminatorField(fieldName="type") * @DiscriminatorMap({"article"="Articulo", "album"="Album"}) */class Articulo{ // ...}

/** * @Document(collection="documentos") * @DiscriminatorField(fieldName="type") * @DiscriminatorMap({"article"="Articulo", "album"="Album"}) */class Album{ // ...}

Saturday, June 16, 2012

Page 64: Symfony2 y MongoDB - deSymfony 2012

/** @Document */class Usuario{ /** @Id */ private $id;

/** @String */ private $nombre;

/** @String */ private $email;

/** @ReferenceMany(targetDocument="Articulo", cascade="all") */ private $articulos = array();

// ...}

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 65: Symfony2 y MongoDB - deSymfony 2012

/** @Document */class Articulo{ /** @Id */ private $id;

/** @String */ private $titulo;

/** @String */ private $contenido;

/** @Date */ private $createdAt;

// ...}

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 66: Symfony2 y MongoDB - deSymfony 2012

<?php

// crear un usuario$user = new Usuario();$user->setNombre('Juan P.');$user->setEmail('[email protected]');

// avisale a Doctrine2 que guarde $usuario en el próximo flush()$dm->persist($usuario);

// crear un articulo$articulo = new Articulo();$articulo->setTitulo('Mi primer articulo');$articulo->setContenido('MongoDB + Doctrine 2 ODM = espectacular!');$articulo->setCreatedAt(new DateTime());

$user->agregarArticulo($articulo);

// guarda todo en MongoDB$dm->flush();

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 67: Symfony2 y MongoDB - deSymfony 2012

<?php

// crear un usuario$usuario = new Usuario();$usuario->setNombre('Juan P.');$usuario->setEmail('[email protected]');

// avisale a Doctrine2 que guarde $usuario en el próximo flush()$dm->persist($usuario);

// crear un articulo$articulo = new Articulo();$articulo->setTitulo('Mi primer articulo');$articulo->setContenido('MongoDB + Doctrine 2 ODM = espectacular!');$articulo->setCreatedAt(new DateTime());

$user->addArticulo($articulo);

// guarda todo en MongoDB$dm->flush($usuario);

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 68: Symfony2 y MongoDB - deSymfony 2012

<?php

// crear un usuario$user = new Usuario();$user->setNombre('Juan P.');$user->setEmail('[email protected]');

// avisale a Doctrine2 que guarde $usuario en el próximo flush()$dm->persist($usuario);

// crear un articulo$articulo = new Articulo();$articulo->setTitulo('Mi primer articulo');$articulo->setContenido('MongoDB + Doctrine 2 ODM = espectacular!');$articulo->setCreatedAt(new DateTime());

$user->agregarArticulo($articulo);

// guarda todo en MongoDB$dm->flush($usuario, false);

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 69: Symfony2 y MongoDB - deSymfony 2012

Array( [_id] => 4bec5869fdc212081d000000 [titulo] => My First Blog Post [contenido] => MongoDB + Doctrine 2 ODM = awesomeness! [createdAt] => MongoDate Object ( [sec] => 1273723200 [usec] => 0 ))

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 70: Symfony2 y MongoDB - deSymfony 2012

Array( [_id] => 4bec5869fdc212081d010000 [nombre] => Bulat S. [email] => [email protected] [articulos] => Array ( [0] => Array ( [$ref] => Articulo [$id] => 4bec5869fdc212081d000000 [$db] => test_database ) ))

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 71: Symfony2 y MongoDB - deSymfony 2012

$usuario = $dm->find('Usuario', $idDelUsuario);

$usuario = $dm->getRepository('Usuario')->findOneByNombre('Juan');

$articulos = $usuario->getArticulos();foreach ($articulos as $articulo) { echo $articulo;}

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 72: Symfony2 y MongoDB - deSymfony 2012

// src/TuNamespace/TuBundle/ServerRepository.phpnamespace TuNamespace\TuBundle;

use Doctrine\ODM\MongoDB\DocumentRepository;

class ServerRepository extends DocumentRepository{ public function getActiveServers() { return $this->createQueryBuilder() ->field('isActive')->equals(true) ->sort('name', 'asc')->getQuery()->execute(); }

Repositorios de documents

$rep = $dm->getRepository(‘@TuBundle/Server’);$servers = $rep->getActiveServers();

Usage

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 73: Symfony2 y MongoDB - deSymfony 2012

/** @Document */class Imagen{ /** @Id */ private $id;

/** @Field */ private $nombre;

/** @File */ private $file;

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 74: Symfony2 y MongoDB - deSymfony 2012

// guardar archivo$imagen = new Imagen();$imagen->setNombre('Imagen de prueba');$imagen->setFile('/path/to/imagen.png');

$dm->persist($imagen);$dm->flush();

// obtener documento y enviar archivo al cliente HTTP$imagen = $dm->createQueryBuilder('Documents\Imagen') ->field('nombre')->equals('Imagen de prueba') ->getQuery() ->getSingleResult();

header('Content-type: image/png;');echo $imagen->getFile()->getBytes();

Doctrine MongoDB ODM

Saturday, June 16, 2012

Page 75: Symfony2 y MongoDB - deSymfony 2012

Saturday, June 16, 2012

Page 76: Symfony2 y MongoDB - deSymfony 2012

¡No necesita introducción!

Saturday, June 16, 2012

Page 77: Symfony2 y MongoDB - deSymfony 2012

Bundles de Symfony2

- DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 78: Symfony2 y MongoDB - deSymfony 2012

Bundles de Symfony2

- DoctrineMongoDBBundle

- MandangoBundle

Saturday, June 16, 2012

Page 79: Symfony2 y MongoDB - deSymfony 2012

DoctrineMongoDBBundle

Instalación en Symfony 2.0

[doctrine-mongodb] git=http://github.com/doctrine/mongodb.git

[doctrine-mongodb-odm] git=http://github.com/doctrine/mongodb-odm.git

[DoctrineMongoDBBundle] git=http://github.com/doctrine/DoctrineMongoDBBundle.git target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle version=v2.0.0

$ ./bin/vendors install

deps

Saturday, June 16, 2012

Page 80: Symfony2 y MongoDB - deSymfony 2012

DoctrineMongoDBBundle

Instalación en Symfony 2.1 con Composer

{ require: { "doctrine/mongodb-odm-bundle": "dev-master" }}

$ php composer.phar update

composer.json

Saturday, June 16, 2012

Page 81: Symfony2 y MongoDB - deSymfony 2012

Configurando Symfony2.1

use Doctrine\Common\Annotations\AnnotationRegistry;

AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php');

app/autoload.php

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 82: Symfony2 y MongoDB - deSymfony 2012

doctrine_mongodb: connections: default: server: mongodb://localhost:27017 options: connect: true default_database: test_database document_managers: default: auto_mapping: true

app/config/config.yml

DoctrineMongoDBBundleConfigurando Symfony2.1

Saturday, June 16, 2012

Page 83: Symfony2 y MongoDB - deSymfony 2012

app/config/config.ymldoctrine_mongodb: connections: default: server: mongodb://localhost:27017 options: connect: true

usage: server: mongodb://user:[email protected]:27017 options: replicaSet: true connect: true default_database: test_database document_managers: default: mappings: SGCBundle: ~ SGCRepositoryAppBundle: yml MiBundle: { type: xml, dir: Resources/config/doctrine/mapping }

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 84: Symfony2 y MongoDB - deSymfony 2012

Definiendo Documentos

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 85: Symfony2 y MongoDB - deSymfony 2012

Definiendo Documentos// src/Acme/StoreBundle/Document/Product.phpnamespace Acme\StoreBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/** * @MongoDB\Document(collection="product") */class Product{ /** * @MongoDB\Id */ protected $id;

/** * @MongoDB\String @MongoDB\Index(unique=true, order="asc") */ protected $name;

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 86: Symfony2 y MongoDB - deSymfony 2012

Usando Documentos// src/Acme/StoreBundle/Controller/DefaultController.phpuse Acme\StoreBundle\Document\Product;use Symfony\Component\HttpFoundation\Response;// ...

public function createAction(){ $product = new Product(); $product->setName('A Foo Bar'); $product->setPrice('19.99');

$dm = $this->get('doctrine.odm.mongodb.document_manager'); $dm->persist($product); $dm->flush();

return new Response('Created product id '.$product->getId());}

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 87: Symfony2 y MongoDB - deSymfony 2012

Consumiendo Mongo directamente// src/Acme/StoreBundle/Controller/DefaultController.phpuse Symfony\Component\HttpFoundation\Response;// ...

public function createAction(){ $dm = $this->get('doctrine.odm.mongodb.document_manager'); $mongo = $dm->getConnection()->getMongo()); $resultado = $mongo->miBD->miColleccion->find();

...

DoctrineMongoDBBundle

Saturday, June 16, 2012

Page 88: Symfony2 y MongoDB - deSymfony 2012

FormulariosDebido a que los documentos son objetos simples de PHP, integrar los formularios es extremadamente sencillo.

public function createAction(){ $dm = $this->get('doctrine.odm.mongodb.default_document_manager');

$form = $this->createForm(new RegistrationType(), new Registration());

$form->bindRequest($this->getRequest());

if ($form->isValid()) { $registration = $form->getData();

$dm->persist($registration->getUser()); $dm->flush();

return $this->redirect(...); }

http://symfony.com/doc/master/bundles/DoctrineMongoDBBundle/form.html

Saturday, June 16, 2012

Page 89: Symfony2 y MongoDB - deSymfony 2012

Comandos de Symfony2doctrine doctrine:mongodb:cache:clear-metadata Clear all metadata cache for a document manager. doctrine:mongodb:fixtures:load Load data fixtures to your database. doctrine:mongodb:generate:documents Generate document classes and method stubs from your mapping information. doctrine:mongodb:generate:hydrators Generates hydrator classes for document classes. doctrine:mongodb:generate:proxies Generates proxy classes for document classes. doctrine:mongodb:generate:repositories Generate repository classes from your mapping information. doctrine:mongodb:mapping:info Show basic information about all mapped documents. doctrine:mongodb:query Query mongodb and inspect the outputted results from your document classes. doctrine:mongodb:schema:create Allows you to create databases, collections and indexes for your documents doctrine:mongodb:schema:drop Allows you to drop databases, collections and indexes for your documents

Comandos

Saturday, June 16, 2012

Page 90: Symfony2 y MongoDB - deSymfony 2012

Bundles que usan MongoDB

- SonataDoctrineMongoDBAdminBundle

- IsmaAmbrosiGeneratorBundle

- EbutikMongoSessionBundle

- TranslationEditorBundle

- ServerGroveLiveChat

Saturday, June 16, 2012

Page 91: Symfony2 y MongoDB - deSymfony 2012

¿Preguntas?

Saturday, June 16, 2012

Page 92: Symfony2 y MongoDB - deSymfony 2012

¡Muchas Gracias!

Transparencias: http://slideshare.net/pgodelTwitter: @pgodel

Saturday, June 16, 2012