# app/config/config.yml
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: hello_%kernel.environment%
document_managers:
default:
mappings:
AcmeDemoBundle: ~
filters:
filter-name:
class: Class\Example\Filter\ODM\ExampleFilter
enabled: true
metadata_cache_driver: array # array, apc, xcache, memcache
Si deseas utilizar memcache para memorizar tus metadatos, es necesario configurar la instancia Memcache; por ejemplo, puedes hacer lo siguiente:
# app/config/config.yml
doctrine_mongodb:
default_database: hello_%kernel.environment%
connections:
default:
server: mongodb://localhost:27017
options: {}
document_managers:
default:
mappings:
AcmeDemoBundle: ~
metadata_cache_driver:
type: memcache
class: Doctrine\Common\Cache\MemcacheCache
host: localhost
port: 11211
instance_class: Memcache
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:doctrine_mongodb="http://symfony.com/schema/dic/doctrine/odm/mongodb"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/doctrine/odm/mongodb http://symfony.com/schema/dic/doctrine/odm/mongodb/mongodb-1.0.xsd">
<doctrine_mongodb:config default-database="hello_%kernel.environment%">
<doctrine_mongodb:document-manager id="default">
<doctrine_mongodb:mapping name="AcmeDemoBundle" />
<doctrine_mongodb:metadata-cache-driver type="memcache">
<doctrine_mongodb:class>Doctrine\Common\Cache\MemcacheCache</doctrine_mongodb:class>
<doctrine_mongodb:host>localhost</doctrine_mongodb:host>
<doctrine_mongodb:port>11211</doctrine_mongodb:port>
<doctrine_mongodb:instance-class>Memcache</doctrine_mongodb:instance-class>
</doctrine_mongodb:metadata-cache-driver>
</doctrine_mongodb:document-manager>
<doctrine_mongodb:connection id="default" server="mongodb://localhost:27017">
<doctrine_mongodb:options>
</doctrine_mongodb:options>
</doctrine_mongodb:connection>
</doctrine_mongodb:config>
</container>
La definición explícita de todos los documentos asignados es la única configuración necesaria para ODM y hay varias opciones de configuración que puedes controlar. Existen las siguientes opciones de configuración para una asignación:
Para evitar tener que configurar un montón de información para tus asignaciones, debes seguir los siguientes convenios:
La siguiente configuración muestra un montón de ejemplos de asignación:
doctrine_mongodb:
document_managers:
default:
mappings:
MyBundle1: ~
MyBundle2: yml
MyBundle3: { type: annotation, dir: Documents/ }
MyBundle4: { type: xml, dir: Resources/config/doctrine/mapping }
MyBundle5:
type: yml
dir: my-bundle-mappings-dir
alias: BundleAlias
doctrine_extensions:
type: xml
dir: %kernel.root_dir%/../src/vendor/DoctrineExtensions/lib/DoctrineExtensions/Documents
prefix: DoctrineExtensions\Documents\
alias: DExt
Fácilmente puedes añadir filtros a un gestor de documentos utilizando la siguiente sintaxis:
doctrine_mongodb:
document_managers:
default:
filters:
filter-one:
class: Class\ExampleOne\Filter\ODM\ExampleFilter
enabled: true
filter-two:
class: Class\ExampleTwo\Filter\ODM\ExampleFilter
enabled: false
Los filtros se usan para añadir condiciones al queryBuilder sin tener en cuenta dónde se generó la consulta.
Si necesitas múltiples conexiones y gestores de documentos puedes utilizar la siguiente sintaxis:
Ahora puedes recuperar los servicios configurados conectando servicios:
$conn1 = $container->get('doctrine_mongodb.odm.conn1_connection');
$conn2 = $container->get('doctrine_mongodb.odm.conn2_connection');
Y también puedes recuperar los gestores de servicios de documentos configurados que utilizan la conexión de servicios anterior:
$dm1 = $container->get('doctrine_mongodb.odm.dm1_document_manager');
$dm2 = $container->get('doctrine_mongodb.odm.dm2_document_manager');
Es posible conectarse a varios servidores mongodb en una conexión si utilizas un conjunto de réplicas haciendo una lista de todos los servidores dentro de la cadena de conexión como una lista separada por comas.
doctrine_mongodb:
# ...
connections:
default:
server: 'mongodb://mongodb-01:27017,mongodb-02:27017,mongodb-03:27017'
Dónde mongodb-01, mongodb-02 y mongodb-03 son los nombres de las máquinas anfitrionas. También puedes utilizar direcciones IP, si lo prefiere.
MongoDB de Doctrine automáticamente es compatible con reintentos de conexión y consultas despues de encontrar una excepción, lo cual es útil cuando tratas con situaciones como conjunto de réplicas para la recuperación de fallos. Esto alivia mucha de la necesidad de capturar las excepciones del controlador MongoDB de PHP en la aplicación y volver a intentar esas operaciones manualmente.
Puedes especificar el número de veces en que se reintentarán las conexiones y consultas a través de las opciones retry_connect y retry_query en la configuración del gestor de documentos. Estas opciones de manerea predeterminada están en cero, lo cual significa que ninguna operación se volverá a intentar.
doctrine_mongodb:
document_managers:
# Prototype
id:
connection: ~
database: ~
logging: true
auto_mapping: false
retry_connect: 0
retry_query: 0
metadata_cache_driver:
type: ~
class: ~
host: ~
port: ~
instance_class: ~
mappings:
# Prototipo
name: []
mapping: true
type: ~
dir: ~
prefix: ~
alias: ~
is_bundle: ~
connections:
# Prototype
id:
server: ~
options:
connect: ~
persist: ~
timeout: ~
replicaSet: ~
username: ~
password: ~
proxy_namespace: MongoDBODMProxies
proxy_dir: %kernel.cache_dir%/doctrine/odm/mongodb/Proxies
auto_generate_proxy_classes: false
hydrator_namespace: Hydrators
hydrator_dir: %kernel.cache_dir%/doctrine/odm/mongodb/Hydrators
auto_generate_hydrator_classes: false
default_document_manager: ~
default_connection: ~
default_database: default