что-то мешает мне сохранить экземпляр EntityManger Doctrine в APC? - PullRequest
2 голосов
/ 20 июля 2011

ум ... глупый вопрос.

Я знаю, что можно (и нужно) использовать драйвер кеша APC с Doctrine ORM. Но мне было просто интересно, смогу ли я также кэшировать сам экземпляр диспетчера сущностей? Есть ли что-то, что мешает мне сделать это:

    $em = apc_fetch('em');
    if(!$em){
        $cache = new Doctrine\Common\Cache\ApcCache;
        $config = new Doctrine\ORM\Configuration;
        $config->setMetadataCacheImpl($cache);
        $config->setQueryCacheImpl($cache);
        $config->setAutoGenerateProxyClasses(TRUE);
        $config->setProxyNamespace('MyProject\Proxies');
        $config->setProxyDir(APP_PATH . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'proxy');
        $driverImpl = $config->newDefaultAnnotationDriver('/path/to/lib/MyProject/Entities');
        $config->setMetadataDriverImpl($driverImpl);
        $connectionOptions = array(
            'driver' => 'pdo_sqlite',
            'path' => 'database.sqlite'
        );
        $em = Doctrine\ORM\EntityManager::create($connectionOptions, $config);
        apc_store('em', $em);
    }

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Ваш код должен работать просто отлично. На самом деле мы также делаем кэш EM в наших проектах. Экономит около 300Кб:)

0 голосов
/ 21 июля 2012

У меня была такая же проблема, и я решил ее следующим образом:

$em=unserialize($_SESSION['entityManager']);
$_SESSION['entityManager']=serialize($entityManager);

(На самом деле, я сериализую саморазвитый объект DAOFactory, который, в свою очередь, содержит диспетчер сущностей).

Это, кажется, работает нормально для меня.

Кстати: я не использую кэш APC, потому что я хочу, чтобы у каждого пользователя был отдельный экземпляр всех объектов entityManager и DBALConnection DAO.

...