function bootstrapAddTreeExtension($evm, $cachedAnnotationReader) { $treeListener = new Gedmo\Tree\TreeListener(); $treeListener->setAnnotationReader($cachedAnnotationReader); $evm->addEventSubscriber($treeListener); $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit()); }
public function onBootstrap(Event $e) { $application = $e->getApplication(); $eventManager = $application->getEventManager(); $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'setApplicationSection')); $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'setLayout'), 31); $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'setLayout'), 31); $app = $e->getParam('application'); $sm = $app->getServiceManager(); $evm = $sm->get('doctrine.eventmanager.orm_default'); $config = $sm->get('Config'); $tablePrefix = isset($config['doctrine']['connection']['orm_default']['params']['table_prefix']) ? $config['doctrine']['connection']['orm_default']['params']['table_prefix'] : FALSE; if ($tablePrefix) { $tablePrefix = new \Dxapp\Doctrine\Extension\TablePrefix($tablePrefix); $evm->addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePrefix); } $cache = $sm->get('doctrine.cache.memcache'); $annotationReader = new \Doctrine\Common\Annotations\AnnotationReader(); $cachedAnnotationReader = new \Doctrine\Common\Annotations\CachedReader($annotationReader, $cache); $em = $sm->get('doctrine.entitymanager.orm_default'); \Doctrine\DBAL\Types\Type::overrideType('datetime', 'Dxapp\\Doctrine\\Types\\UTCDatetimeType'); // $em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('Datetime', 'datetime'); $sluggableListener = new \Gedmo\Sluggable\SluggableListener(); $sluggableListener->setAnnotationReader($cachedAnnotationReader); $evm->addEventSubscriber($sluggableListener); $treeListener = new \Gedmo\Tree\TreeListener(); $treeListener->setAnnotationReader($cachedAnnotationReader); $evm->addEventSubscriber($treeListener); $timestampableListener = new \Gedmo\Timestampable\TimestampableListener(); $timestampableListener->setAnnotationReader($cachedAnnotationReader); $evm->addEventSubscriber($timestampableListener); $translatableListener = new \Gedmo\Translatable\TranslatableListener(); $translatableListener->setAnnotationReader($cachedAnnotationReader); $translatableListener->setTranslatableLocale('en'); $translatableListener->setDefaultLocale('en'); $evm->addEventSubscriber($translatableListener); }
// 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); // 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');
/** * Init doctrine method * * @return Shopware\Components\Model\ModelManager */ public function initModels() { /** @var $config \Doctrine\ORM\Configuration */ $config = $this->getResource('ModelConfig'); $cacheResource = $this->getResource('Cache'); // Check if native Doctrine ApcCache may be used if ($cacheResource->getBackend() instanceof Zend_Cache_Backend_Apc) { $cache = new Doctrine\Common\Cache\ApcCache(); } else { $cache = new Shopware\Components\Model\Cache($cacheResource); } // register standard doctrine annotations Doctrine\Common\Annotations\AnnotationRegistry::registerFile( 'Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php' ); // register symfony validation annotions Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace( 'Symfony\Component\Validator\Constraint' ); // register gedmo annotions Doctrine\Common\Annotations\AnnotationRegistry::registerFile( 'Gedmo/Mapping/Annotation/All.php' ); $cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader( new Doctrine\Common\Annotations\AnnotationReader, $cache ); $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver( $cachedAnnotationReader, array( $this->Application()->Loader()->isReadable('Gedmo/Tree/Entity/MappedSuperclass'), $this->Application()->AppPath('Models') )); // create a driver chain for metadata reading $driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain(); // register annotation driver for our application $driverChain->addDriver($annotationDriver, 'Gedmo'); $driverChain->addDriver($annotationDriver, 'Shopware\\Models\\'); $driverChain->addDriver($annotationDriver, 'Shopware\\CustomModels\\'); $this->registerResource('ModelAnnotations', $annotationDriver); $config->setMetadataDriverImpl($driverChain); // Create event Manager $eventManager = new \Doctrine\Common\EventManager(); $treeListener = new Gedmo\Tree\TreeListener; $treeListener->setAnnotationReader($cachedAnnotationReader); $eventManager->addEventSubscriber($treeListener); // Create new shopware event subscriber to handle the entity lifecycle events. $liveCycleSubscriber = new \Shopware\Components\Model\EventSubscriber( $this->Application()->Events() ); $eventManager->addEventSubscriber($liveCycleSubscriber); // now create the entity manager and use the connection // settings we defined in our application.ini $conn = \Doctrine\DBAL\DriverManager::getConnection( array('pdo' => $this->Application()->Db()->getConnection()), $config, $eventManager ); $entityManager = Shopware\Components\Model\ModelManager::create($conn, $config, $eventManager); //if (!is_readable(rtrim($config->getProxyDir(), '/') . '/__CG__ShopwareModelsShopShop.php')) { // $metadata = $entityManager->getMetadataFactory()->getAllMetadata(); // $proxyFactory = $entityManager->getProxyFactory(); // $proxyFactory->generateProxyClasses($metadata); //} return $entityManager; }
private static function newConnect() { $dir = __DIR__ . '/../../libs/Doctrine/'; $vendorPath = realpath($dir); $ExtensionPath = realpath($dir . '/DoctrineExtensions'); require_once $vendorPath . '/Doctrine/Common/ClassLoader.php'; // autoload all vendors $loader = new Doctrine\Common\ClassLoader('Doctrine\\Common', $vendorPath); $loader->register(); $loader = new Doctrine\Common\ClassLoader('Doctrine\\DBAL', $vendorPath); $loader->register(); $loader = new Doctrine\Common\ClassLoader('Doctrine\\ORM', $vendorPath); $loader->register(); // gedmo extensions $loader = new Doctrine\Common\ClassLoader('Gedmo', $ExtensionPath); $loader->register(); // Pagefanta $classLoader = new Doctrine\Common\ClassLoader("Pagerfanta", $ExtensionPath); $classLoader->register(); //MYSQL Functions $classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', realpath($dir)); $classLoader->register(); // autoloader for Entity namespace $loader = new Doctrine\Common\ClassLoader('Entities', $dir); $loader->register(); // ensure standard doctrine annotations are registered Doctrine\Common\Annotations\AnnotationRegistry::registerFile($vendorPath . '/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'); // Second configure ORM // globally used cache driver $cache = new Doctrine\Common\Cache\ArrayCache(); $reader = new \Doctrine\Common\Annotations\AnnotationReader(); Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace('Gedmo\\Mapping\\Annotation', $ExtensionPath); $driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain(); $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array($dir . 'Entities', $ExtensionPath . '/Gedmo/Tree/Entity')); // drivers $driverChain->addDriver($annotationDriver, 'Gedmo\\Tree\\Entity'); $driverChain->addDriver($annotationDriver, 'Entities'); // general ORM configuration $config = new Doctrine\ORM\Configuration(); //$config->setProxyDir(sys_get_temp_dir()); $config->setProxyDir($dir . '/Proxies'); $config->setProxyNamespace('Proxy'); $config->setAutoGenerateProxyClasses(true); // this can be based on production config. FALSE // register metadata driver $config->setMetadataDriverImpl($driverChain); // use our allready initialized cache driver $config->setMetadataCacheImpl($cache); $config->setQueryCacheImpl($cache); // Third, create event manager and hook prefered extension listeners $evm = new Doctrine\Common\EventManager(); // gedmo extension listeners // tree $treeListener = new Gedmo\Tree\TreeListener(); $treeListener->setAnnotationReader($reader); $evm->addEventSubscriber($treeListener); // timestampable $timestampableListener = new Gedmo\Timestampable\TimestampableListener(); $timestampableListener->setAnnotationReader($reader); $evm->addEventSubscriber($timestampableListener); // mysql set names UTF-8 if required $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit()); // Finally, create entity manager $connection = array('dbname' => DB_DATABASE, 'user' => DB_USER, 'password' => DB_PASSWORD, 'host' => DB_HOST, 'driver' => 'pdo_mysql'); $config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\\Query\\Mysql\\Year'); $config->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\\Query\\Mysql\\Month'); $config->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\\Query\\Mysql\\Day'); $config->addCustomDatetimeFunction('HOUR', 'DoctrineExtensions\\Query\\Mysql\\Hour'); $config->addCustomDatetimeFunction('DATE', 'DoctrineExtensions\\Query\\Mysql\\Date'); $config->addCustomDatetimeFunction('DATEDIFF', 'DoctrineExtensions\\Query\\MySql\\DateDiff'); try { $em = Doctrine\ORM\EntityManager::create($connection, $config, $evm); } catch (Exception $e) { } self::$EntityManager = $em; }
/** * Bootstrap the app * @return void */ public static function bootstrap() { if (!class_exists("Doctrine\\Common\\Version", false)) { self::registerNamespaces(); } $isDevMode = true; $entityPath = ROOT_PATH . '/entities'; $proxyPath = ROOT_PATH . '/proxies'; $reader = new \Doctrine\Common\Annotations\AnnotationReader(); $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader); \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace('Gedmo\\Mapping\\Annotation', ROOT_PATH . '/vendor/doctrine-extension/lib'); $driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain(); $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array(ROOT_PATH . '/entities/Entity', ROOT_PATH . '/vendor/doctrine-extension/lib/Gedmo/Translatable/Entity', ROOT_PATH . '/vendor/doctrine-extension/lib/Gedmo/Tree/Entity')); //Drivers $driverChain->addDriver($annotationDriver, 'Gedmo\\Translatable\\Entity'); $driverChain->addDriver($annotationDriver, 'Gedmo\\Tree\\Entity'); $driverChain->addDriver($annotationDriver, 'Entity'); //Tell doctrine that we use annotations for entities $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array($entityPath), $isDevMode, $proxyPath); $config->setMetadataDriverImpl($driverChain); //Attach listener to the event system event manager $eventManager = new \Doctrine\Common\EventManager(); $treeListener = new \Gedmo\Tree\TreeListener(); $treeListener->setAnnotationReader($reader); $eventManager->addEventSubscriber($treeListener); $sluggableListener = new \Gedmo\Sluggable\SluggableListener(); $sluggableListener->setAnnotationReader($reader); $eventManager->addEventSubscriber($sluggableListener); $translationListener = new \Gedmo\Translatable\TranslationListener(); $translationListener->setAnnotationReader($reader); $translationListener->setTranslatableLocale('en_us'); $eventManager->addEventSubscriber($translationListener); $timestampListener = new \Gedmo\Timestampable\TimestampableListener(); $timestampListener->setAnnotationReader($reader); $eventManager->addEventSubscriber($timestampListener); $sortableListener = new \Gedmo\Sortable\SortableListener(); $sortableListener->setAnnotationReader($reader); $eventManager->addEventSubscriber($sortableListener); //Obtaining the entity manager $entityManager = \Doctrine\ORM\EntityManager::create(self::getConnectionOptions(), $config, $eventManager); //Register app type \Doctrine\DBAL\Types\Type::addType('point', 'Statme\\ORM\\PointType'); \Doctrine\DBAL\Types\Type::addType('enumgender', 'Statme\\ORM\\Enum\\GenderType'); \Doctrine\DBAL\Types\Type::addType('enumthreadstatus', 'Statme\\ORM\\Enum\\ThreadStatusType'); \Doctrine\DBAL\Types\Type::addType('enumunittype', 'Statme\\ORM\\Enum\\UnitType'); \Doctrine\DBAL\Types\Type::addType('enumprivacy', 'Statme\\ORM\\Enum\\PrivacyType'); \Doctrine\DBAL\Types\Type::addType('enumsubscriptionstatus', 'Statme\\ORM\\Enum\\SubscriptionStatusType'); //Register point type for schema tool $platform = $entityManager->getConnection()->getDatabasePlatform(); $platform->registerDoctrineTypeMapping('point', 'point'); $platform->registerDoctrineTypeMapping('enum', 'string'); $platform->registerDoctrineTypeMapping('enumgender', 'enumgender'); $platform->registerDoctrineTypeMapping('enumthreadstatus', 'enumthreadstatus'); $platform->registerDoctrineTypeMapping('enumunittype', 'enumunittype'); $platform->registerDoctrineTypeMapping('enumprivacy', 'enumprivacy'); $platform->registerDoctrineTypeMapping('enumsubscriptionstatus', 'enumsubscriptionstatus'); self::$entityManager = $entityManager; return; }
/** * Gets the 'gedmo.listener.tree' service. * * This service is shared. * This method always returns the same instance of the service. * * @return \Gedmo\Tree\TreeListener A Gedmo\Tree\TreeListener instance. */ protected function getGedmo_Listener_TreeService() { $this->services['gedmo.listener.tree'] = $instance = new \Gedmo\Tree\TreeListener(); $instance->setAnnotationReader($this->get('annotation_reader')); return $instance; }