Nettrine ORM – Vypnutí generování proxies tříd
- RePRO
- Člen | 32
Zdravím,
je možné nějak nastavit, aby se automaticky negenerovaly proxies?
Nastavili jsme v konfiguraci:
nettrine.orm:
configuration:
autoGenerateProxyClasses: ::constant(Doctrine\Common\Proxy\AbstractProxyFactory::AUTOGENERATE_NEVER)
Jenže stále se generuje (i po tom, co odmažeme cache). Cílem je
problematika lazy loadingu
v tomto kontextu.
Děkuji předem za poznatky.
- RePRO
- Člen | 32
Přes DI:
nettrine.orm.configuration -> Doctrine\ORM\Configuration
→
klíč autoGenerateProxyClasses
tam vůbec není. Zároveň jsem
zakomentoval v konfigurátoru klíč
#proxyDir: '%tempDir%/proxies'
a ten se v DI ukazuje. Buď to
nereaguje jak má, nebo si nedokáži vysvětlit, co to může přebíjet. Cache
mažu pokaždé.
Editoval RePRO (27. 2. 2021 12:46)
- Felix
- Nette Core | 1196
V DI by jsi mel mit neco jako tohle.
public function createServiceNettrine__orm__configuration(): Doctrine\ORM\Configuration
{
$service = new Doctrine\ORM\Configuration;
$service->setProxyDir('{projectPath}/var/tmp/proxies');
$service->setAutoGenerateProxyClasses(2);
$service->setProxyNamespace('Nettrine\Proxy');
$service->setMetadataDriverImpl($this->getService('nettrine.orm.mappingDriver'));
$service->setCustomStringFunctions([]);
$service->setCustomNumericFunctions([]);
$service->setCustomDatetimeFunctions([]);
$service->setCustomHydrationModes([]);
$service->setNamingStrategy(new Doctrine\ORM\Mapping\UnderscoreNamingStrategy);
$service->setEntityListenerResolver($this->getService('nettrine.orm.entityListenerResolver'));
$service->setQueryCacheImpl($this->getService('nettrine.cache.driver'));
$service->setHydrationCacheImpl($this->getService('nettrine.cache.driver'));
$service->setResultCacheImpl($this->getService('nettrine.cache.driver'));
$service->setMetadataCacheImpl($this->getService('nettrine.cache.driver'));
$service->setSecondLevelCacheEnabled();
$service->setSecondLevelCacheConfiguration($this->getService('nettrine.orm.cache.cacheConfiguration'));
return $service;
}
- RePRO
- Člen | 32
$service->setAutoGenerateProxyClasses(2);
Tam prostě nemám. Viz.
public function createServiceNettrine__orm__configuration(): Doctrine\ORM\Configuration
{
$service = new Doctrine\ORM\Configuration;
$service->setProxyDir('...');
$service->setProxyNamespace('Nettrine\Proxy');
$service->setMetadataDriverImpl($this->getService('nettrine.orm.mappingDriver'));
$service->setCustomStringFunctions([
'JSON_EXTRACT' => 'Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonExtract',
]);
$service->setCustomNumericFunctions([]);
$service->setCustomDatetimeFunctions([]);
$service->setCustomHydrationModes([]);
$service->setNamingStrategy(new Doctrine\ORM\Mapping\UnderscoreNamingStrategy);
$service->setEntityListenerResolver($this->getService('nettrine.orm.entityListenerResolver'));
$service->setQueryCacheImpl($this->getService('nettrine.cache.driver'));
$service->setHydrationCacheImpl($this->getService('nettrine.cache.driver'));
$service->setResultCacheImpl($this->getService('nettrine.cache.driver'));
$service->setMetadataCacheImpl($this->getService('nettrine.cache.driver'));
$service->setSecondLevelCacheEnabled();
$service->setSecondLevelCacheConfiguration($this->getService('nettrine.orm.cache.cacheConfiguration'));
return $service;
}
- RePRO
- Člen | 32
nettrine.orm:
configuration:
autoGenerateProxyClasses: ::constant(Doctrine\Common\Proxy\AbstractProxyFactory::AUTOGENERATE_NEVER)
Na tuhle hodnotu to nereaguje – nejspíš to vypadá, že mám špatně namespace k té konstantě a podobně. Když tam nahodím boolean natvrdo:
Nastavíme true, tak už se nastaví
$service->setAutoGenerateProxyClasses(2)
jako tobě.
Akorát když nastavíme na false:
nettrine.orm:
configuration:
autoGenerateProxyClasses: false
require(... proxies\__CG__AppModelEntita.php): failed to open stream: No such file or directory
Tak se to snaží otevřít tu proxinu, která neexistuje a spadne to. Možná jsem to taky špatně pochopil, když se to vypne úplně, tak to bude do toho adresáře koukat a využívat nebo se pletu?
Editoval RePRO (27. 2. 2021 15:30)
- Felix
- Nette Core | 1196
@RePRO Tak covece, nedalo mi to a prozkoumal jsem to. Byl tam bug,
kdyz jsi to zadal jako bool/int tak to fungovalo skvele. Ale ten tvuj zapis
autoGenerateProxyClasses: ::constant(Doctrine\Common\Proxy\AbstractProxyFactory::AUTOGENERATE_NEVER)
nefungoval. xD
Opravil jsem to (https://github.com/…/orm/pull/90).
Zkus prosim dev-master.
Btw, vymyslel jsem u toho skvelou vec, takze diky za report a diky za inspiraci. :-D
- RePRO
- Člen | 32
Felix napsal(a):
@RePRO Tak covece, nedalo mi to a prozkoumal jsem to. Byl tam bug, kdyz jsi to zadal jako bool/int tak to fungovalo skvele. Ale ten tvuj zapis
autoGenerateProxyClasses: ::constant(Doctrine\Common\Proxy\AbstractProxyFactory::AUTOGENERATE_NEVER)
nefungoval. xDOpravil jsem to (https://github.com/…/orm/pull/90).
Zkus prosim dev-master.
Btw, vymyslel jsem u toho skvelou vec, takze diky za report a diky za inspiraci. :-D
Jop, frčí to, pecka.
Taky se mi občas stalo, že jakýkoliv bug mi otevřel vrátka ještě lepším
směrem v určité problematice :-)
Díkec :)
- Michal Palounek
- Člen | 2
Zdravím,
řeším úplně stejnou věc jako RePRO v prvním komentáři. Mam stejnou
konfiguraci v neonu a v composer mam:
nettrine/orm": "^0.8.4",
"nettrine/dbal": "^0.8.2",
"nettrine/migrations": "^0.9.1",
"nettrine/fixtures": "^0.7.2"
A hlásí mi to přesně tu samou chybu:
require(...temp//proxies/__CG__AppModelDatabaseDoctrineEntityEnumerationItem.php): Failed to open stream: No such file or directory