Referencia de configuración de Doctrine

  • YAML
    doctrine:
        dbal:
            default_connection:   default
            types:
                # Una colección de tipos personalizados
                # Ejemplo
                un_tipo_personalizado:
                    class:                Acme\HelloBundle\MiTipoPersonalizado
                    commented:            true
    
            connections:
                default:
                    dbname:               database
    
                # Una colección de diferentes nombres de conexión (p. ej. default, conn2, etc.)
                default:
                    dbname:               ~
                    host:                 localhost
                    port:                 ~
                    user:                 root
                    password:             ~
                    charset:              ~
                    path:                 ~
                    memory:               ~
    
                    # El conector usado por MySQL
                    unix_socket:          ~
    
                    # true para que el controlador ibm_db2 la utilice como conexión persistente
                    persistent:           ~
    
                    # El protocolo que utilizará el controlador ibm_db2 (predefinido a TCPIP si se omite)
                    protocol:             ~
    
                    # true para usar dbname como nombre de servicio en vez del SID para Oracle
                    service:              ~
    
                    # El modo de sesión que usará el controlador oci8
                    sessionMode:          ~
    
                    # True para usar un servidor agrupado con el controlador oci8
                    pooled:               ~
    
                    # Configurando MultipleActiveResultSets para el controlador pdo_sqlsrv
                    MultipleActiveResultSets:  ~
                    driver:               pdo_mysql
                    platform_service:     ~
                    logging:              %kernel.debug%
                    profiling:            %kernel.debug%
                    driver_class:         ~
                    wrapper_class:        ~
                    options:
                        # Un arreglo de opciones
                        key:                  []
                    mapping_types:
                        # un arreglo de tipos asignados
                        name:                 []
                    slaves:
    
                        # una colección de nombres de conexión esclavas (p. ej. slave1, slave2)
                        slave1:
                            dbname:               ~
                            host:                 localhost
                            port:                 ~
                            user:                 root
                            password:             ~
                            charset:              ~
                            path:                 ~
                            memory:               ~
    
                            # El conector usado por MySQL
                            unix_socket:          ~
    
                            # True para usarla como conexión persistente para el controlador ibm_db2
                            persistent:           ~
    
                            # El protocolo que utilizará el controlador ibm_db2 (predefinido a TCPIP si se omite)
                            protocol:             ~
    
                            # True para usar dbname como un nombre de servicio en vez de SID para Oracle
                            service:              ~
    
                            # El modo de sesión que usará el controlador oci8
                            sessionMode:          ~
    
                            # True para usar un servidor agrupado con el controlador oci8
                            pooled:               ~
    
                            # Configurando MultipleActiveResultSets para el controlador pdo_sqlsrv
                            MultipleActiveResultSets:  ~
    
        orm:
            default_entity_manager:  ~
            auto_generate_proxy_classes:  false
            proxy_dir:            %kernel.cache_dir%/doctrine/orm/Proxies
            proxy_namespace:      Proxies
            # busca la clase "ResolveTargetEntityListener" para una receta sobre este
            resolve_target_entities: []
            entity_managers:
                # Una colección de diferentes nombres de gestores de entidad (p. ej. un_em, otro_em)
                some_em:
                    query_cache_driver:
                        type:                 array # Requerido
                        host:                 ~
                        port:                 ~
                        instance_class:       ~
                        class:                ~
                    metadata_cache_driver:
                        type:                 array # Requerido
                        host:                 ~
                        port:                 ~
                        instance_class:       ~
                        class:                ~
                    result_cache_driver:
                        type:                 array # Requerido
                        host:                 ~
                        port:                 ~
                        instance_class:       ~
                        class:                ~
                    connection:           ~
                    class_metadata_factory_name:  Doctrine\ORM\Mapping\ClassMetadataFactory
                    default_repository_class:  Doctrine\ORM\EntityRepository
                    auto_mapping:         false
                    hydrators:
    
                        # Un arreglo de nombres de hidratantes
                        hydrator_name:                 []
                    mappings:
                        # Un arreglo de asignaciones, que puede ser un nombre de paquete o algo más
                        mapping_name:
                            mapping:              true
                            type:                 ~
                            dir:                  ~
                            alias:                ~
                            prefix:               ~
                            is_bundle:            ~
                    dql:
                        # Una colección de funciones de cadena
                        string_functions:
                            # ejemplo
                            # test_string: Acme\HelloBundle\DQL\StringFunction
    
                        # Una colección de funciones numéricas
                        numeric_functions:
                            # ejemplo
                            # test_numeric: Acme\HelloBundle\DQL\NumericFunction
    
                        # Una colección de funciones datetime
                        datetime_functions:
                            # ejemplo
                            # test_datetime: Acme\HelloBundle\DQL\DatetimeFunction
    
                    # Filtros SQL registrados en el gestor de la entidad
                    filters:
                        # Un arreglo de filtros
                        un_filtro:
                            class:                ~ # Requerido
                            enabled:              false
  • XML
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:doctrine="http://symfony.com/schema/dic/doctrine"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
                            http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd">
    
        <doctrine:config>
            <doctrine:dbal default-connection="default">
                <doctrine:connection
                    name="default"
                    dbname="database"
                    host="localhost"
                    port="1234"
                    user="user"
                    password="secret"
                    driver="pdo_mysql"
                    driver-class="MyNamespace\MyDriverImpl"
                    path="%kernel.data_dir%/data.sqlite"
                    memory="true"
                    unix-socket="/tmp/mysql.sock"
                    wrapper-class="MyDoctrineDbalConnectionWrapper"
                    charset="UTF8"
                    logging="%kernel.debug%"
                    platform-service="MyOwnDatabasePlatformService"
                >
                    <doctrine:option key="foo">bar</doctrine:option>
                    <doctrine:mapping-type name="enum">string</doctrine:mapping-type>
                </doctrine:connection>
                <doctrine:connection name="conn1" />
                <doctrine:type name="custom">Acme\HelloBundle\MyCustomType</doctrine:type>
            </doctrine:dbal>
    
            <doctrine:orm default-entity-manager="default" auto-generate-proxy-classes="false" proxy-namespace="Proxies" proxy-dir="%kernel.cache_dir%/doctrine/orm/Proxies">
                <doctrine:entity-manager name="default" query-cache-driver="array" result-cache-driver="array" connection="conn1" class-metadata-factory-name="Doctrine\ORM\Mapping\ClassMetadataFactory">
                    <doctrine:metadata-cache-driver type="memcache" host="localhost" port="11211" instance-class="Memcache" class="Doctrine\Common\Cache\MemcacheCache" />
                    <doctrine:mapping name="AcmeHelloBundle" />
                    <doctrine:dql>
                        <doctrine:string-function name="test_string>Acme\HelloBundle\DQL\StringFunction</doctrine:string-function>
                        <doctrine:numeric-function name="test_numeric>Acme\HelloBundle\DQL\NumericFunction</doctrine:numeric-function>
                        <doctrine:datetime-function name="test_datetime>Acme\HelloBundle\DQL\DatetimeFunction</doctrine:datetime-function>
                    </doctrine:dql>
                </doctrine:entity-manager>
                <doctrine:entity-manager name="em2" connection="conn2" metadata-cache-driver="apc">
                    <doctrine:mapping
                        name="DoctrineExtensions"
                        type="xml"
                        dir="%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/DoctrineExtensions/Entity"
                        prefix="DoctrineExtensions\Entity"
                        alias="DExt"
                    />
                </doctrine:entity-manager>
            </doctrine:orm>
        </doctrine:config>
    </container>

Describiendo la configuración

El siguiente ejemplo de configuración muestra todos los valores de configuración predeterminados que resuelve ORM:

doctrine:
    orm:
        auto_mapping: true
        # la distribución estándar lo sustituye a true en depuración,
        # false en cualquier otro caso
        auto_generate_proxy_classes: false
        proxy_namespace: Proxies
        proxy_dir: "%kernel.cache_dir%/doctrine/orm/Proxies"
        default_entity_manager: default
        metadata_cache_driver: array
        query_cache_driver: array
        result_cache_driver: array

Hay un montón de opciones de configuración que puedes utilizar para redefinir ciertas clases, pero solamente son para casos de uso muy avanzado.

Controladores de caché

Para los controladores de caché puedes especificar los valores «array», «apc», «memcache», «memchached», «xcache» o «service».

El siguiente ejemplo muestra una descripción de los ajustes de la memoria caché:

doctrine:
    orm:
        auto_mapping: true
        metadata_cache_driver: apc
        query_cache_driver:
            type: service
            id: my_doctrine_common_cache_service
        result_cache_driver:
            type: memcache
            host: localhost
            port: 11211
            instance_class: Memcache

Configurando la asignación

La definición explícita de todas las entidades asignadas es la única configuración necesaria para el ORM y hay varias opciones de configuración que puedes ajustar. Existen las siguientes opciones de configuración para una asignación:

  • type Uno de annotation, xml, yml, php o staticphp. Esta especifica cual tipo de metadatos usa el tipo de tu asignación.
  • dir Ruta a la asignación o archivos de entidad (dependiendo del controlador). Si esta ruta es relativa, se supone que es relativa a la raíz del paquete. Esto sólo funciona si el nombre de tu asignación es un nombre de paquete. Si deseas utilizar esta opción para especificar rutas absolutas, debes prefijar la ruta con los parámetros del núcleo existentes en el DIC (por ejemplo %kernel.root_dir%).
  • prefix Un prefijo común del espacio de nombres que comparten todas las entidades de esta asignación. Este prefijo nunca debe entrar en conflicto con otros prefijos de asignación definidos, de otra manera Doctrine no podrá encontrar algunas de tus entidades. Esta opción tiene predeterminado el espacio de nombres paquete + Entity, por ejemplo, para un paquete llamado AcmeHelloBundle el prefijo sería Acme\HelloBundle\Entity.
  • alias Doctrine ofrece una forma de simplificar el espacio de nombres de la entidad, para utilizar nombres más cortos en las consultas DQL o para acceder al Repositorio. Cuando utilices un paquete el alias predeterminado es el nombre del paquete.
  • is_bundle Esta opción es un valor derivado de dir y por omisión se establece en true, si dir es relativo provisto por un file_exists() comprueba que devuelve false. Este es false si al comprobar la existencia devuelve true. En este caso has especificado una ruta absoluta y es más probable que los archivos de metadatos estén en un directorio fuera del paquete.

Configurando DBAL de Doctrine

DoctrineBundle apoya todos los parámetros que los controladores de Doctrine aceptan por omisión, convertidos a la nomenclatura estándar de XML o YAML que Symfony respeta. Consulta la documentación oficial de DBAL de Doctrine para más información. El siguiente bloque muestra todas las posibles claves de configuración:

  • YAML
    doctrine:
        dbal:
            dbname:               database
            host:                 localhost
            port:                 1234
            user:                 user
            password:             secret
            driver:               pdo_mysql
            # the DBAL driverClass option
            driver_class:         MyNamespace\MyDriverImpl
            # the DBAL driverOptions option
            options:
                foo: bar
            path:                 "%kernel.data_dir%/data.sqlite"
            memory:               true
            unix_socket:          /tmp/mysql.sock
            # the DBAL wrapperClass option
            wrapper_class:        MyDoctrineDbalConnectionWrapper
            charset:              UTF8
            logging:              "%kernel.debug%"
            platform_service:     MyOwnDatabasePlatformService
            mapping_types:
                enum: string
            types:
                custom: Acme\HelloBundle\MyCustomType
            # the DBAL keepSlave option
            keep_slave:           false
    
  • XML
    <!-- xmlns:doctrine="http://symfony.com/schema/dic/doctrine" -->
    <!-- xsi:schemaLocation="http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> -->
    
    <doctrine:config>
        <doctrine:dbal
            name="default"
            dbname="database"
            host="localhost"
            port="1234"
            user="user"
            password="secret"
            driver="pdo_mysql"
            driver-class="MyNamespace\MyDriverImpl"
            path="%kernel.data_dir%/data.sqlite"
            memory="true"
            unix-socket="/tmp/mysql.sock"
            wrapper-class="MyDoctrineDbalConnectionWrapper"
            charset="UTF8"
            logging="%kernel.debug%"
            platform-service="MyOwnDatabasePlatformService"
        >
            <doctrine:option key="foo">bar</doctrine:option>
            <doctrine:mapping-type name="enum">string</doctrine:mapping-type>
            <doctrine:type name="custom">Acme\HelloBundle\MyCustomType</doctrine:type>
        </doctrine:dbal>
    </doctrine:config>
    

Si deseas configurar varias conexiones en YAML, ponlas bajo la clave connections y dales un nombre único:

doctrine:
    dbal:
        default_connection:       default
        connections:
            default:
                dbname:           Symfony2
                user:             root
                password:         null
                host:             localhost
            customer:
                dbname:           customer
                user:             root
                password:         null
                host:             localhost

El servicio database_connection siempre se refiere a la conexión default, misma que es la primera definida o la configurada a través del parámetro default_connection.

Cada conexión también es accesible a través del servicio doctrine.dbal.[nombre]_connection donde [nombre] es el nombre de la conexión.

Bifúrcame en GitHub