Your SlideShare is downloading. ×
0
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Symfony2 y MongoDB - deSymfony 2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Symfony2 y MongoDB - deSymfony 2012

6,169

Published on

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

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.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,169
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
155
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Saturday, June 16, 2012
  • 2. Saturday, June 16, 2012
  • 3. ¿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 parrillaSaturday, June 16, 2012
  • 4. Saturday, June 16, 2012
  • 5. Saturday, June 16, 2012
  • 6. ServerGrove! ⁃ 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!Saturday, June 16, 2012
  • 7. La comunidad es nuestra guia ⁃ Muy activos en la comunidad de Open Source contribuyendo con código o patrocinando eventos y grupos de usuariosSaturday, June 16, 2012
  • 8. Agenda - Introducción a MongoDB - PHP y MongoDB - Librerías en PHP - Symfony2 y MongoDBSaturday, June 16, 2012
  • 9. ¿Qué es MongoDB? ¿Quién es 10Gen?Saturday, June 16, 2012
  • 10. Mongo Mongo viene de "humongous". Usado para describir algo extremadamente grande o importanteSaturday, June 16, 2012
  • 11. 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
  • 12. Descripción - 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ónSaturday, June 16, 2012
  • 13. Orientada a Objetos ¿Vienes de SQL? Base de datos => Base de datos Tabla => Colección Fila => DocumentoSaturday, June 16, 2012
  • 14. Documentos Tipo JSON { nombre: { primero: Juan, apellido: Perez }, titulo: Ingeniero, edad: 40 }Saturday, June 16, 2012
  • 15. Sin Schema o Tablas Fijas { nombre: { primero: Juan, apellido: Perez }, titulo: Ingeniero, edad: 40, escuela: UJI }Saturday, June 16, 2012
  • 16. Documentos Embebidos { "_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" } ] } }Saturday, June 16, 2012
  • 17. Referencias Entre Documentos { "_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") } ] }Saturday, June 16, 2012
  • 18. Indices db.personal.ensureIndex({nombre: 1}) db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1}) db. personal.ensureIndex({edad: 0})Saturday, June 16, 2012
  • 19. Indices db.personal.ensureIndex({nombre: 1}) db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1}) db. personal.ensureIndex({edad: 0})Saturday, June 16, 2012
  • 20. Indices db.personal.ensureIndex({nombre: 1}) db. personal.ensureIndex({nombre.primer: 1, nombre.apellido: 1}) db. personal.ensureIndex({edad: 0})Saturday, June 16, 2012
  • 21. Consultas db. personal.find({nombre: Juan}) db. personal.find({tags: symfony}) db. personal.find({tags: {$in: [symfony, PHP]}}Saturday, June 16, 2012
  • 22. Consultas db. personal.find({nombre: Juan}) db. personal.find({tags: symfony}) db. personal.find({tags: {$in: [symfony, PHP]}}Saturday, June 16, 2012
  • 23. Consultas db. personal.find({nombre: Juan}) db. personal.find({tags: symfony}) db. personal.find({tags: {$in: [symfony, PHP]}}Saturday, June 16, 2012
  • 24. GridFS - Archivos son divididos en “chunks” o partes y son guardados en múltiples documentos - API transparenteSaturday, June 16, 2012
  • 25. Replicación Source: http://www.mongodb.org/display/DOCS/ReplicationSaturday, June 16, 2012
  • 26. Shards Source: http://www.mongodb.org/display/DOCS/IntroductionSaturday, June 16, 2012
  • 27. Simple instalación con cero configuración OS X 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 ./mongodSaturday, June 16, 2012
  • 28. Simple instalación con cero configuración CentOS Linux /etc/yum.repos.d/10gen.repo [10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 $ yum install -y mongo-stable-server $ service mongod startSaturday, June 16, 2012
  • 29. Backups mongodump mongodump -u usuario -p pass mongorestore mongorestore -u usuario -p pass mongoexport mongoexport -u usuario -p pass mongoimport mongoimport -u usuario -p passSaturday, June 16, 2012
  • 30. Monitoreo mongostatSaturday, June 16, 2012
  • 31. Monitoreohttp://localhost:28017/Saturday, June 16, 2012
  • 32. ¿Por qué MongoDB es bueno para el desarrollo rápido de aplicacones web?Saturday, June 16, 2012
  • 33. Desarrollo Rápido de Aplicaciones Sin schema / orientada a documentos FLEXIBLE by exfordySaturday, June 16, 2012
  • 34. Desarrollo Rápido de Aplicaciones Sin schema / orientada a documentos MIGRACIONES MAS FACILES by exfordySaturday, June 16, 2012
  • 35. Desarrollo Rápido de Aplicaciones NO HAY JOINS!Saturday, June 16, 2012
  • 36. Rendimiento VELOZ by xavi talledaSaturday, June 16, 2012
  • 37. Rendimiento ESCALABILIDAD by Jimee, Jackie, Tom & AshaSaturday, June 16, 2012
  • 38. Ojo al piojo! - No hay transacciones - No hay rollbacks - Valores inseguros por defecto - Locks en Map Reduce by Ernst VikneSaturday, June 16, 2012
  • 39. Buenas aplicaciones - Sistema de manejo de contenidos (CMS) - Catálogos de productos - Análisis en tiempo real - Almacenamiento de logsSaturday, June 16, 2012
  • 40. ySaturday, June 16, 2012
  • 41. Driver de PECL Linux pecl install mongo echo “extension=mongo.so >> /path/php.ini” OS X http://php-osx.liip.ch/ Windows https://github.com/mongodb/mongo-php-driver/downloadsSaturday, June 16, 2012
  • 42. Uso <?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 resultados foreach ($cursor as $obj) {     echo $obj["titulo"] . "n"; } ?>Saturday, June 16, 2012
  • 43. Almacenamiento de Archivos <?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))); ?>Saturday, June 16, 2012
  • 44. Queries de SQL a Mongo http://php.net/manual/es/mongo.sqltomongo.phpSaturday, June 16, 2012
  • 45. Interfaces de Administración - Genghis http://genghisapp.com/Saturday, June 16, 2012
  • 46. Interfaces de Administración - RockMongo http://code.google.com/p/rock-php/wiki/rock_mongoSaturday, June 16, 2012
  • 47. Interfaces de Administración - php-mongodb-admin https://github.com/jwage/php-mongodb-adminSaturday, June 16, 2012
  • 48. Interfaces de Administración - mongohosting.com https://github.com/jwage/php-mongodb-adminSaturday, June 16, 2012
  • 49. Librerias en PHP - Doctrine ODMSaturday, June 16, 2012
  • 50. Librerias en PHP - Doctrine ODM - MandangoSaturday, June 16, 2012
  • 51. Librerias en PHP - Doctrine ODM - Mandango - varias más...Saturday, June 16, 2012
  • 52. 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
  • 53. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 54. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 55. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 56. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 57. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 58. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 59. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 60. Doctrine MongoDB ODM Tipos de Mappings bin_data_custom float bin_data_func hash bin_data_md5 id bin_data int bin_data_uuid key boolean string date timestamp file incrementSaturday, June 16, 2012
  • 61. Doctrine MongoDB ODM Campos “AutoIncrement” <?php /** Document */ class MiClase { /** @Id(strategy="INCREMENT") */ private $id; public function getId() { return $this->id; } //... }Saturday, June 16, 2012
  • 62. Doctrine MongoDB ODM Tipos propios <?php namespace MyProjectTypes; use DoctrineDBALTypesType; use DoctrineDBALPlatformsAbstractPlatform; /** * 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
  • 63. Doctrine MongoDB ODM Mú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
  • 64. Doctrine MongoDB ODM /** @Document */ class Usuario { /** @Id */ private $id; /** @String */ private $nombre; /** @String */ private $email; /** @ReferenceMany(targetDocument="Articulo", cascade="all") */ private $articulos = array(); // ... }Saturday, June 16, 2012
  • 65. Doctrine MongoDB ODM /** @Document */ class Articulo { /** @Id */ private $id; /** @String */ private $titulo; /** @String */ private $contenido; /** @Date */ private $createdAt; // ... }Saturday, June 16, 2012
  • 66. Doctrine MongoDB ODM <?php // crear un usuario $user = new Usuario(); $user->setNombre(Juan P.); $user->setEmail(email@example.com); // 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();Saturday, June 16, 2012
  • 67. Doctrine MongoDB ODM <?php // crear un usuario $usuario = new Usuario(); $usuario->setNombre(Juan P.); $usuario->setEmail(email@example.com); // 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);Saturday, June 16, 2012
  • 68. Doctrine MongoDB ODM <?php // crear un usuario $user = new Usuario(); $user->setNombre(Juan P.); $user->setEmail(email@example.com); // 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);Saturday, June 16, 2012
  • 69. Doctrine MongoDB ODM Array ( [_id] => 4bec5869fdc212081d000000 [titulo] => My First Blog Post [contenido] => MongoDB + Doctrine 2 ODM = awesomeness! [createdAt] => MongoDate Object ( [sec] => 1273723200 [usec] => 0 ) )Saturday, June 16, 2012
  • 70. Doctrine MongoDB ODM Array ( [_id] => 4bec5869fdc212081d010000 [nombre] => Bulat S. [email] => email@example.com [articulos] => Array ( [0] => Array ( [$ref] => Articulo [$id] => 4bec5869fdc212081d000000 [$db] => test_database ) ) )Saturday, June 16, 2012
  • 71. Doctrine MongoDB ODM $usuario = $dm->find(Usuario, $idDelUsuario); $usuario = $dm->getRepository(Usuario)->findOneByNombre(Juan); $articulos = $usuario->getArticulos(); foreach ($articulos as $articulo) { echo $articulo; }Saturday, June 16, 2012
  • 72. Doctrine MongoDB ODM Repositorios de documents // src/TuNamespace/TuBundle/ServerRepository.php namespace TuNamespaceTuBundle; use DoctrineODMMongoDBDocumentRepository; class ServerRepository extends DocumentRepository { public function getActiveServers() { return $this->createQueryBuilder() ->field(isActive)->equals(true) ->sort(name, asc)->getQuery()->execute(); } Usage $rep = $dm->getRepository(‘@TuBundle/Server’); $servers = $rep->getActiveServers();Saturday, June 16, 2012
  • 73. Doctrine MongoDB ODM /** @Document */ class Imagen { /** @Id */ private $id; /** @Field */ private $nombre; /** @File */ private $file;Saturday, June 16, 2012
  • 74. Doctrine MongoDB ODM // 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(DocumentsImagen) ->field(nombre)->equals(Imagen de prueba) ->getQuery() ->getSingleResult(); header(Content-type: image/png;); echo $imagen->getFile()->getBytes();Saturday, June 16, 2012
  • 75. Saturday, June 16, 2012
  • 76. ¡No necesita introducción!Saturday, June 16, 2012
  • 77. Bundles de Symfony2 - DoctrineMongoDBBundleSaturday, June 16, 2012
  • 78. Bundles de Symfony2 - DoctrineMongoDBBundle - MandangoBundleSaturday, June 16, 2012
  • 79. DoctrineMongoDBBundle Instalación en Symfony 2.0 deps [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 installSaturday, June 16, 2012
  • 80. DoctrineMongoDBBundle Instalación en Symfony 2.1 con Composer composer.json { require: { "doctrine/mongodb-odm-bundle": "dev-master" } } $ php composer.phar updateSaturday, June 16, 2012
  • 81. DoctrineMongoDBBundle Configurando Symfony2.1 app/autoload.php use DoctrineCommonAnnotationsAnnotationRegistry; AnnotationRegistry::registerFile(__DIR__./../vendor/doctrine/ mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/ DoctrineAnnotations.php);Saturday, June 16, 2012
  • 82. DoctrineMongoDBBundle Configurando Symfony2.1 app/config/config.yml doctrine_mongodb: connections: default: server: mongodb://localhost:27017 options: connect: true default_database: test_database document_managers: default: auto_mapping: trueSaturday, June 16, 2012
  • 83. DoctrineMongoDBBundle app/config/config.yml doctrine_mongodb: connections: default: server: mongodb://localhost:27017 options: connect: true usage: server: mongodb://user:pass@db1.mongohosting.com: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 }Saturday, June 16, 2012
  • 84. DoctrineMongoDBBundle Definiendo DocumentosSaturday, June 16, 2012
  • 85. DoctrineMongoDBBundle Definiendo Documentos // src/Acme/StoreBundle/Document/Product.php namespace AcmeStoreBundleDocument; use DoctrineODMMongoDBMappingAnnotations as MongoDB; /** * @MongoDBDocument(collection="product") */ class Product { /** * @MongoDBId */ protected $id; /** * @MongoDBString @MongoDBIndex(unique=true, order="asc") */ protected $name;Saturday, June 16, 2012
  • 86. DoctrineMongoDBBundle Usando Documentos // src/Acme/StoreBundle/Controller/DefaultController.php use AcmeStoreBundleDocumentProduct; use SymfonyComponentHttpFoundationResponse; // ... 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()); }Saturday, June 16, 2012
  • 87. DoctrineMongoDBBundle Consumiendo Mongo directamente // src/Acme/StoreBundle/Controller/DefaultController.php use SymfonyComponentHttpFoundationResponse; // ... public function createAction() { $dm = $this->get(doctrine.odm.mongodb.document_manager); $mongo = $dm->getConnection()->getMongo()); $resultado = $mongo->miBD->miColleccion->find(); ...Saturday, June 16, 2012
  • 88. Formularios Debido 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.htmlSaturday, June 16, 2012
  • 89. Comandos Comandos de Symfony2 doctrine 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 documentsSaturday, June 16, 2012
  • 90. Bundles que usan MongoDB - SonataDoctrineMongoDBAdminBundle - IsmaAmbrosiGeneratorBundle - EbutikMongoSessionBundle - TranslationEditorBundle - ServerGroveLiveChatSaturday, June 16, 2012
  • 91. ¿Preguntas?Saturday, June 16, 2012
  • 92. ¡Muchas Gracias! Transparencias: http://slideshare.net/pgodel Twitter: @pgodelSaturday, June 16, 2012

×