em.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. // connection args, modify at will
  3. $connection = array(
  4. 'host' => '127.0.0.1',
  5. 'port' => 3306,
  6. 'user' => 'root',
  7. 'password' => 'nimda',
  8. 'dbname' => 'test',
  9. 'driver' => 'pdo_mysql'
  10. );
  11. // First of all autoloading of vendors
  12. $vendorPath = realpath(__DIR__.'/../vendor');
  13. $gedmoPath = realpath(__DIR__.'/../lib');
  14. $doctrineClassLoaderFile = $vendorPath.'/doctrine-common/lib/Doctrine/Common/ClassLoader.php';
  15. if (!file_exists($doctrineClassLoaderFile)) {
  16. die('cannot find vendor, run: php bin/vendors.php to install doctrine');
  17. }
  18. require $doctrineClassLoaderFile;
  19. use Doctrine\Common\ClassLoader;
  20. // autoload all vendors
  21. $loader = new ClassLoader('Doctrine\Common', $vendorPath.'/doctrine-common/lib');
  22. $loader->register();
  23. $loader = new ClassLoader('Doctrine\DBAL', $vendorPath.'/doctrine-dbal/lib');
  24. $loader->register();
  25. $loader = new ClassLoader('Doctrine\ORM', $vendorPath.'/doctrine-orm/lib');
  26. $loader->register();
  27. // gedmo extensions
  28. $loader = new ClassLoader('Gedmo', $gedmoPath);
  29. $loader->register();
  30. // if you use yaml, you need a yaml parser, same as command line tool
  31. $loader = new ClassLoader('Symfony', $vendorPath);
  32. $loader->register();
  33. // autoloader for Entity namespace
  34. $loader = new ClassLoader('Entity', __DIR__.'/app');
  35. $loader->register();
  36. // Second configure ORM
  37. $config = new Doctrine\ORM\Configuration;
  38. $config->setProxyDir(sys_get_temp_dir());
  39. $config->setProxyNamespace('Proxy');
  40. $config->setAutoGenerateProxyClasses(false);
  41. // standard annotation reader
  42. $annotationReader = new Doctrine\Common\Annotations\AnnotationReader;
  43. // gedmo annotation loader
  44. Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace(
  45. 'Gedmo\Mapping\Annotation',
  46. $gedmoPath
  47. );
  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. $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($annotationReader, array(
  55. __DIR__.'/app/Entity', // example entity
  56. $gedmoPath.'/Gedmo/Translatable/Entity',
  57. $gedmoPath.'/Gedmo/Loggable/Entity',
  58. $gedmoPath.'/Gedmo/Tree/Entity',
  59. ));
  60. // drivers for diferent namespaces
  61. $driverChain->addDriver($annotationDriver, 'Entity');
  62. $driverChain->addDriver($annotationDriver, 'Gedmo\Translatable\Entity');
  63. $driverChain->addDriver($annotationDriver, 'Gedmo\Loggable\Entity');
  64. $driverChain->addDriver($annotationDriver, 'Gedmo\Tree\Entity');
  65. // register metadata driver
  66. $config->setMetadataDriverImpl($driverChain);
  67. // cache
  68. $config->setMetadataCacheImpl(new Doctrine\Common\Cache\ArrayCache);
  69. $config->setQueryCacheImpl(new Doctrine\Common\Cache\ArrayCache);
  70. $evm = new Doctrine\Common\EventManager();
  71. // gedmo extension listeners
  72. $evm->addEventSubscriber(new Gedmo\Sluggable\SluggableListener);
  73. $evm->addEventSubscriber(new Gedmo\Tree\TreeListener);
  74. $evm->addEventSubscriber(new Gedmo\Loggable\LoggableListener);
  75. $evm->addEventSubscriber(new Gedmo\Timestampable\TimestampableListener);
  76. $translatable = new Gedmo\Translatable\TranslationListener;
  77. $translatable->setTranslatableLocale('en');
  78. $translatable->setDefaultLocale('en');
  79. $evm->addEventSubscriber($translatable);
  80. // mysql set names UTF-8
  81. $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
  82. // create entity manager
  83. return Doctrine\ORM\EntityManager::create($connection, $config, $evm);