@@ -521,4 +521,151 @@ can be placed directly under ``doctrine.orm`` config level.
521521
522522Keep in mind that you can't use both syntaxes at the same time.
523523
524+ Custom Mapping Entities in a Bundle
525+ ----------------------------------- 
526+ 
527+ Doctrine's ``auto_mapping `` feature loads annotation configuration from the
528+ ``Entity/ `` directory of each bundle *and * looks for other formats (e.g. YAML, XML)
529+ in the ``Resources/config/doctrine `` directory.
530+ 
531+ If you store metadata somewhere else in your bundle, you can define your own mappings,
532+ where you tell Doctrine exactly *where * to look, along with some other configurations.
533+ 
534+ If you're using the ``auto_mapping `` configuration, you just need to overwrite the
535+ configurations you want. In this case it's important that the key of the mapping 
536+ configurations corresponds to the name of the bundle.
537+ 
538+ For example, suppose you decide to store your ``XML `` configuration for ``AppBundle `` entities
539+ in the ``@AppBundle/SomeResources/config/doctrine `` directory instead:
540+ 
541+ .. configuration-block ::
542+ 
543+  .. code-block :: yaml 
544+   
545+  doctrine : 
546+  #  ... 
547+  orm : 
548+  #  ... 
549+  auto_mapping : true  
550+  mappings : 
551+  #  ... 
552+  AppBundle : 
553+  type : xml  
554+  dir : SomeResources/config/doctrine  
555+   
556+ code-block :: xml 
557+   
558+  <?xml  version =" 1.0"  charset =" UTF-8"  
559+  <container  xmlns =" http://symfony.com/schema/dic/services"  
560+  xmlns : doctrine =" http://symfony.com/schema/dic/doctrine"  
561+   
562+  <doctrine : config > 
563+  <doctrine : orm  auto-mapping =" true"  
564+  <mapping  name =" AppBundle" dir =" SomeResources/config/doctrine" type =" xml"  
565+  </doctrine : orm > 
566+  </doctrine : config > 
567+  </container > 
568+   
569+ code-block :: php 
570+   
571+  $container->loadFromExtension('doctrine', array( 
572+  'orm' => array( 
573+  'auto_mapping' => true, 
574+  'mappings' => array( 
575+  'AppBundle' => array('dir' => 'SomeResources/config/doctrine', 'type' => 'xml'), 
576+  ), 
577+  ), 
578+  )); 
579+ 
580+ 
581+ ------------------------------------ 
582+ 
583+ You can also create new mappings, for example outside of the Symfony folder.
584+ 
585+ For example, the following looks for entity classes in the ``App\Entity `` namespace in the
586+ ``src/Entity `` directory and gives them an ``App `` alias (so you can say things like ``App:Post ``):
587+ 
588+ .. configuration-block ::
589+ 
590+  .. code-block :: yaml 
591+   
592+  doctrine : 
593+  #  ... 
594+  orm : 
595+  #  ... 
596+  mappings : 
597+  #  ... 
598+  SomeEntityNamespace : 
599+  type : annotation  
600+  dir : %kernel.root_dir%/../src/Entity  
601+  is_bundle : false  
602+  prefix : App\Entity  
603+  alias : App  
604+   
605+ code-block :: xml 
606+   
607+  <?xml  version =" 1.0"  charset =" UTF-8"  
608+  <container  xmlns =" http://symfony.com/schema/dic/services"  
609+  xmlns : doctrine =" http://symfony.com/schema/dic/doctrine"  
610+   
611+  <doctrine : config > 
612+  <doctrine : orm > 
613+  <mapping  name =" SomeEntityNamespace"  
614+  type =" annotation"  
615+  dir =" %kernel.root_dir%/../src/Entity"  
616+  is-bundle =" false"  
617+  prefix =" App\Entity"  
618+  alias =" App"  
619+  /> 
620+  </doctrine : orm > 
621+  </doctrine : config > 
622+  </container > 
623+   
624+ code-block :: php 
625+   
626+  $container->loadFromExtension('doctrine', array( 
627+  'orm' => array( 
628+  'auto_mapping' => true, 
629+  'mappings' => array( 
630+  'SomeEntityNamespace' => array( 
631+  'type' => 'annotation', 
632+  'dir' => '%kernel.root_dir%/../src/Entity', 
633+  'is_bundle' => false, 
634+  'prefix' => 'App\Entity', 
635+  'alias' => 'App', 
636+  ), 
637+  ), 
638+  ), 
639+  )); 
640+ 
641+ 
642+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
643+ 
644+ If the ``type `` on the bundle configuration isn't set,
645+ the DoctrineBundle will try to detect the correct mapping configuration format for
646+ the bundle.
647+ 
648+ DoctrineBundle will look for files matching ``*.orm.[FORMAT] `` (e.g. ``Post.orm.yml ``)
649+ in the configured ``dir `` of your mapping (if you're mapping a bundle, then ``dir `` is
650+ relative to the bundle's directory).
651+ 
652+ The bundle looks for (in this order) XML, YAML and PHP files.
653+ Using the ``auto_mapping `` feature, every bundle can have only one configuration format.
654+ The bundle will stop as soon as it locates one.
655+ 
656+ If it wasn't possible to determine a configuration format for a bundle,
657+ the DoctrineBundle will check if there is an ``Entity `` folder in the bundle's root directory.
658+ If the folder exist, Doctrine will fall back to using an annotation driver.
659+ 
660+ Default Value of dir
661+ ~~~~~~~~~~~~~~~~~~~~ 
662+ 
663+ If ``dir `` is not specified, then its default value depends on which configuration driver is being used.
664+ For drivers that rely on the PHP files (annotation, staticphp) it will
665+ be ``[Bundle]/Entity ``. For drivers that are using configuration
666+ files (XML, YAML, ...) it will be ``[Bundle]/Resources/config/doctrine ``.
667+ 
668+ If the ``dir `` configuration is set and the ``is_bundle `` configuration is ``true ``,
669+ the DoctrineBundle will prefix the ``dir `` configuration with the path of the bundle.
670+ 
524671.. _`DQL User Defined Functions` : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html 
0 commit comments