em.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. // Second configure ORM
  42. $config = new Doctrine\ORM\Configuration;
  43. $config->setProxyDir(sys_get_temp_dir());
  44. $config->setProxyNamespace('Proxy');
  45. $config->setAutoGenerateProxyClasses(false);
  46. // standard annotation reader
  47. $annotationReader = new Doctrine\Common\Annotations\AnnotationReader;
  48. // standard doctrine annotations
  49. Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
  50. $vendorPath.'/doctrine-orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'
  51. );
  52. // register annotation driver
  53. $driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain();
  54. // load superclass extension metadata mapping into driver chain also registers annotation autoload
  55. Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM($driverChain);
  56. // personal annotation reader for Entity namespace
  57. $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($annotationReader, array(
  58. __DIR__.'/app/Entity', // example entity
  59. ));
  60. // register our Entity driver
  61. $driverChain->addDriver($annotationDriver, 'Entity');
  62. // register metadata driver
  63. $config->setMetadataDriverImpl($driverChain);
  64. // cache
  65. $config->setMetadataCacheImpl(new Doctrine\Common\Cache\ArrayCache);
  66. $config->setQueryCacheImpl(new Doctrine\Common\Cache\ArrayCache);
  67. $evm = new Doctrine\Common\EventManager();
  68. // gedmo extension listeners
  69. $evm->addEventSubscriber(new Gedmo\Sluggable\SluggableListener);
  70. $evm->addEventSubscriber(new Gedmo\Tree\TreeListener);
  71. $evm->addEventSubscriber(new Gedmo\Loggable\LoggableListener);
  72. $evm->addEventSubscriber(new Gedmo\Timestampable\TimestampableListener);
  73. $translatable = new Gedmo\Translatable\TranslatableListener;
  74. $translatable->setTranslatableLocale('en');
  75. $translatable->setDefaultLocale('en');
  76. $evm->addEventSubscriber($translatable);
  77. // mysql set names UTF-8
  78. $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
  79. // create entity manager
  80. return Doctrine\ORM\EntityManager::create($connection, $config, $evm);