em.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /**
  3. * This entity manager configuration works with doctrine 2.1.x and 2.2.x
  4. * versions. Regarding AnnotationDriver setup it most probably will be changed into
  5. * xml. Because annotation driver fails to read other classes in same namespace
  6. */
  7. // connection args, modify at will
  8. $connection = array(
  9. 'host' => '127.0.0.1',
  10. 'port' => 3306,
  11. 'user' => 'root',
  12. 'password' => 'nimda',
  13. 'dbname' => 'test',
  14. 'driver' => 'pdo_mysql'
  15. );
  16. // First of all autoloading of vendors
  17. $vendorPath = realpath(__DIR__.'/../vendor');
  18. $gedmoPath = realpath(__DIR__.'/../lib');
  19. $doctrineClassLoaderFile = $vendorPath.'/doctrine-common/lib/Doctrine/Common/ClassLoader.php';
  20. if (!file_exists($doctrineClassLoaderFile)) {
  21. die('cannot find vendor, run: php bin/vendors.php to install doctrine');
  22. }
  23. require $doctrineClassLoaderFile;
  24. use Doctrine\Common\ClassLoader;
  25. // autoload all vendors
  26. $loader = new ClassLoader('Doctrine\Common', $vendorPath.'/doctrine-common/lib');
  27. $loader->register();
  28. $loader = new ClassLoader('Doctrine\DBAL', $vendorPath.'/doctrine-dbal/lib');
  29. $loader->register();
  30. $loader = new ClassLoader('Doctrine\ORM', $vendorPath.'/doctrine-orm/lib');
  31. $loader->register();
  32. // gedmo extensions
  33. $loader = new ClassLoader('Gedmo', $gedmoPath);
  34. $loader->register();
  35. // if you use yaml, you need a yaml parser, same as command line tool
  36. $loader = new ClassLoader('Symfony', $vendorPath);
  37. $loader->register();
  38. // autoloader for Entity namespace
  39. $loader = new ClassLoader('Entity', __DIR__.'/app');
  40. $loader->register();
  41. // ensure standard doctrine annotations are registered
  42. Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
  43. $vendorPath.'/doctrine-orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'
  44. );
  45. // Second configure ORM
  46. // globally used cache driver, in production use APC or memcached
  47. $cache = new Doctrine\Common\Cache\ArrayCache;
  48. // standard annotation reader
  49. $annotationReader = new Doctrine\Common\Annotations\AnnotationReader;
  50. $cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader(
  51. $annotationReader, // use reader
  52. $cache // and a cache driver
  53. );
  54. // create a driver chain for metadata reading
  55. $driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain();
  56. // load superclass metadata mapping only, into driver chain
  57. // also registers Gedmo annotations.NOTE: you can personalize it
  58. Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
  59. $driverChain, // our metadata driver chain, to hook into
  60. $cachedAnnotationReader // our cached annotation reader
  61. );
  62. // now we want to register our application entities,
  63. // for that we need another metadata driver used for Entity namespace
  64. $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
  65. $cachedAnnotationReader, // our cached annotation reader
  66. array(__DIR__.'/app/Entity') // paths to look in
  67. );
  68. // NOTE: driver for application Entity can be different, Yaml, Xml or whatever
  69. // register annotation driver for our application Entity namespace
  70. $driverChain->addDriver($annotationDriver, 'Entity');
  71. // general ORM configuration
  72. $config = new Doctrine\ORM\Configuration;
  73. $config->setProxyDir(sys_get_temp_dir());
  74. $config->setProxyNamespace('Proxy');
  75. $config->setAutoGenerateProxyClasses(false); // this can be based on production config.
  76. // register metadata driver
  77. $config->setMetadataDriverImpl($driverChain);
  78. // use our allready initialized cache driver
  79. $config->setMetadataCacheImpl($cache);
  80. $config->setQueryCacheImpl($cache);
  81. // Third, create event manager and hook prefered extension listeners
  82. $evm = new Doctrine\Common\EventManager();
  83. // gedmo extension listeners
  84. // sluggable
  85. $sluggableListener = new Gedmo\Sluggable\SluggableListener;
  86. // you should set the used annotation reader to listener, to avoid creating new one for mapping drivers
  87. $sluggableListener->setAnnotationReader($cachedAnnotationReader);
  88. $evm->addEventSubscriber($sluggableListener);
  89. // tree
  90. $treeListener = new Gedmo\Tree\TreeListener;
  91. $treeListener->setAnnotationReader($cachedAnnotationReader);
  92. $evm->addEventSubscriber($treeListener);
  93. // loggable, not used in example
  94. //$loggableListener = new Gedmo\Loggable\LoggableListener;
  95. //$loggableListener->setAnnotationReader($cachedAnnotationReader);
  96. //$evm->addEventSubscriber($loggableListener);
  97. // timestampable
  98. $timestampableListener = new Gedmo\Timestampable\TimestampableListener;
  99. $timestampableListener->setAnnotationReader($cachedAnnotationReader);
  100. $evm->addEventSubscriber($timestampableListener);
  101. // translatable
  102. $translatableListener = new Gedmo\Translatable\TranslatableListener;
  103. // current translation locale should be set from session or hook later into the listener
  104. // most important, before entity manager is flushed
  105. $translatableListener->setTranslatableLocale('en');
  106. $translatableListener->setDefaultLocale('en');
  107. $translatableListener->setAnnotationReader($cachedAnnotationReader);
  108. $evm->addEventSubscriber($translatableListener);
  109. // sortable, not used in example
  110. //$sortableListener = new Gedmo\Sortable\SortableListener;
  111. //$sortableListener->setAnnotationReader($cachedAnnotationReader);
  112. //$evm->addEventSubscriber($sortableListener);
  113. // mysql set names UTF-8 if required
  114. $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
  115. // Finally, create entity manager
  116. return Doctrine\ORM\EntityManager::create($connection, $config, $evm);