Created
July 1, 2014 11:52
-
-
Save pourquoi/6f6c619500ca248640ee to your computer and use it in GitHub Desktop.
doctrine extensions em.php reproducing bug #990
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * This entity manager configuration works with doctrine 2.1.x and 2.2.x | |
| * versions. Regarding AnnotationDriver setup it most probably will be changed into | |
| * xml. Because annotation driver fails to read other classes in same namespace | |
| */ | |
| // connection args, modify at will | |
| $connection = array( | |
| 'host' => '127.0.0.1', | |
| 'port' => 3306, | |
| 'user' => 'root', | |
| 'password' => '1234', | |
| 'dbname' => 'doctrine_extensions', | |
| 'driver' => 'pdo_mysql' | |
| ); | |
| if (!file_exists(__DIR__.'/../vendor/autoload.php')) { | |
| die('cannot find vendors, read README.md how to use composer'); | |
| } | |
| // First of all autoloading of vendors | |
| $loader = require __DIR__.'/../vendor/autoload.php'; | |
| // gedmo extensions | |
| $loader->add('Gedmo', __DIR__.'/../lib'); | |
| // autoloader for Entity namespace | |
| $loader->add('Entity', __DIR__.'/app'); | |
| // ensure standard doctrine annotations are registered | |
| Doctrine\Common\Annotations\AnnotationRegistry::registerFile( | |
| __DIR__.'/../vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php' | |
| ); | |
| // Second configure ORM | |
| // globally used cache driver, in production use APC or memcached | |
| //$cache = new Doctrine\Common\Cache\ArrayCache; | |
| $cache = new Doctrine\Common\Cache\MemcachedCache(); | |
| $memcached = new \Memcached(); | |
| $memcached->addServer('localhost', '11213'); | |
| $cache->setMemcached($memcached); | |
| // standard annotation reader | |
| $annotationReader = new Doctrine\Common\Annotations\AnnotationReader; | |
| $cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader( | |
| $annotationReader, // use reader | |
| $cache // and a cache driver | |
| ); | |
| // create a driver chain for metadata reading | |
| $driverChain = new Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain(); | |
| // load superclass metadata mapping only, into driver chain | |
| // also registers Gedmo annotations.NOTE: you can personalize it | |
| Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM( | |
| $driverChain, // our metadata driver chain, to hook into | |
| $cachedAnnotationReader // our cached annotation reader | |
| ); | |
| // now we want to register our application entities, | |
| // for that we need another metadata driver used for Entity namespace | |
| $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver( | |
| $cachedAnnotationReader, // our cached annotation reader | |
| array(__DIR__.'/app/Entity') // paths to look in | |
| ); | |
| // NOTE: driver for application Entity can be different, Yaml, Xml or whatever | |
| // register annotation driver for our application Entity namespace | |
| $driverChain->addDriver($annotationDriver, 'Entity'); | |
| // general ORM configuration | |
| $config = new Doctrine\ORM\Configuration; | |
| $config->setProxyDir(sys_get_temp_dir()); | |
| $config->setProxyNamespace('Proxy'); | |
| $config->setAutoGenerateProxyClasses(false); // this can be based on production config. | |
| // register metadata driver | |
| $config->setMetadataDriverImpl($driverChain); | |
| // use our allready initialized cache driver | |
| $config->setMetadataCacheImpl($cache); | |
| $config->setQueryCacheImpl($cache); | |
| $config->setSQLLogger(new Doctrine\DBAL\Logging\EchoSQLLogger()); | |
| // Third, create event manager and hook prefered extension listeners | |
| $evm = new Doctrine\Common\EventManager(); | |
| // gedmo extension listeners | |
| // sluggable | |
| $sluggableListener = new Gedmo\Sluggable\SluggableListener; | |
| // you should set the used annotation reader to listener, to avoid creating new one for mapping drivers | |
| $sluggableListener->setAnnotationReader($cachedAnnotationReader); | |
| $evm->addEventSubscriber($sluggableListener); | |
| // tree | |
| $treeListener = new Gedmo\Tree\TreeListener; | |
| $treeListener->setAnnotationReader($cachedAnnotationReader); | |
| $evm->addEventSubscriber($treeListener); | |
| // loggable, not used in example | |
| //$loggableListener = new Gedmo\Loggable\LoggableListener; | |
| //$loggableListener->setAnnotationReader($cachedAnnotationReader); | |
| //$loggableListener->setUsername('admin'); | |
| //$evm->addEventSubscriber($loggableListener); | |
| // timestampable | |
| $timestampableListener = new Gedmo\Timestampable\TimestampableListener; | |
| $timestampableListener->setAnnotationReader($cachedAnnotationReader); | |
| $evm->addEventSubscriber($timestampableListener); | |
| // blameable | |
| $blameableListener = new \Gedmo\Blameable\BlameableListener(); | |
| $blameableListener->setAnnotationReader($cachedAnnotationReader); | |
| $blameableListener->setUserValue('MyUsername'); // determine from your environment | |
| $evm->addEventSubscriber($blameableListener); | |
| // translatable | |
| $translatableListener = new Gedmo\Translatable\TranslatableListener; | |
| // current translation locale should be set from session or hook later into the listener | |
| // most important, before entity manager is flushed | |
| $translatableListener->setTranslatableLocale('en'); | |
| $translatableListener->setDefaultLocale('en'); | |
| $translatableListener->setAnnotationReader($cachedAnnotationReader); | |
| $evm->addEventSubscriber($translatableListener); | |
| $translatableListener->setTranslatableLocale('lt'); | |
| // sortable, not used in example | |
| //$sortableListener = new Gedmo\Sortable\SortableListener; | |
| //$sortableListener->setAnnotationReader($cachedAnnotationReader); | |
| //$evm->addEventSubscriber($sortableListener); | |
| // mysql set names UTF-8 if required | |
| $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit()); | |
| // Finally, create entity manager | |
| return Doctrine\ORM\EntityManager::create($connection, $config, $evm); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment