em.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. $evm->addEventSubscriber(new Gedmo\Sluggable\SluggableListener);
  85. $evm->addEventSubscriber(new Gedmo\Tree\TreeListener);
  86. $evm->addEventSubscriber(new Gedmo\Loggable\LoggableListener);
  87. $evm->addEventSubscriber(new Gedmo\Timestampable\TimestampableListener);
  88. $translatable = new Gedmo\Translatable\TranslatableListener;
  89. // current translation locale should be set from session or hook later into the listener
  90. // most important, before entity manager is flushed
  91. $translatable->setTranslatableLocale('en');
  92. $translatable->setDefaultLocale('en');
  93. $evm->addEventSubscriber($translatable);
  94. // mysql set names UTF-8 if required
  95. $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
  96. // Finally, create entity manager
  97. return Doctrine\ORM\EntityManager::create($connection, $config, $evm);