Doctrine setEntity is deprecated
- Gavrilo
- Člen | 46
Zdravím,
Snažím sa nainštalovať doctrine a narazil som na celkom zvláštnu zradu.
Nette\DI\Statement::setEntity is deprecated, change Statement object itself.
Zdrojový kód: https://github.com/iGavrilo/DoGa
Neviem nájsť chybu v podstate som tam ani nič nemenil …
Ďakujem
- Tomáš Votruba
- Moderator | 1114
Ahoj, vypadá to, že je to svázané s: https://github.com/…xtension.php
Podle callstacku v tvém screenshotu koukám na bod 3.
Můžeš se podívat, co je na řádku 492 v tom souboru
OrmExtension
v tvé aplikaci?
- Gavrilo
- Člen | 46
Tomáš Votruba napsal(a):
Ahoj, vypadá to, že je to svázané s: https://github.com/…xtension.php
Podle callstacku v tvém screenshotu koukám na bod 3.
Můžeš se podívat, co je na řádku 492 v tom souboru
OrmExtension
v tvé aplikaci?
Ahoj Tomáš ďakujem za tvoju reakciu. Nerozumiem čo tam robí bordel celý doctrine je naozaj len stiahnutý composerom a viac som v ňom nič nerobil. Každopádne tu to máš
/**
* @param \Nette\DI\ServiceDefinition $metadataDriver
* @param string $namespace
* @param string|object $driver
* @param string $prefix
* @throws \Nette\Utils\AssertionException
* @return string
*/
protected function processMetadataDriver(Nette\DI\ServiceDefinition $metadataDriver, $namespace, $driver, $prefix)
{
if (!is_string($namespace) || !Strings::match($namespace, '#^' . self::PHP_NAMESPACE . '\z#')) {
throw new Nette\Utils\AssertionException("The metadata namespace expects to be valid namespace, $namespace given.");
}
$namespace = ltrim($namespace, '\\');
if (is_string($driver) || is_array($driver)) {
$paths = is_array($driver) ? $driver : array($driver);
foreach ($paths as $path) {
if (($pos = strrpos($path, '*')) !== FALSE) {
$path = substr($path, 0, $pos);
}
if (!file_exists($path)) {
throw new Nette\Utils\AssertionException("The metadata path expects to be an existing directory, $path given.");
}
}
$driver = new Statement(self::ANNOTATION_DRIVER, is_array($paths) ? $paths : array($paths));
}
$impl = $driver instanceof \stdClass ? $driver->value : ($driver instanceof Statement ? $driver->entity : (string) $driver);
list($driver) = CacheHelpers::filterArgs($driver);
/** @var Statement $driver */
if (isset($this->metadataDriverClasses[$impl])) {
$driver->entity = $this->metadataDriverClasses[$impl];
}
if (is_string($driver->entity) && substr($driver->entity, 0, 1) === '@') {
$metadataDriver->addSetup('addDriver', array($driver->entity, $namespace));
return $driver->entity;
}
if ($impl === self::ANNOTATION_DRIVER) {
$driver->arguments = array(
Nette\Utils\Arrays::flatten($driver->arguments),
2 => $this->prefix('@cache.' . $prefix . '.metadata')
);
}
$serviceName = $this->prefix($prefix . '.driver.' . str_replace('\\', '_', $namespace) . '.' . $impl . 'Impl');
$this->getContainerBuilder()->addDefinition($serviceName)
->setClass('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver')
->setFactory($driver->entity, $driver->arguments)
->setAutowired(FALSE)
->setInject(FALSE);
$metadataDriver->addSetup('addDriver', array('@' . $serviceName, $namespace));
return '@' . $serviceName;
}
Riadok 492
$driver->entity = $this->metadataDriverClasses[$impl];
- Tomáš Votruba
- Moderator | 1114
Víte někdo, co se má použít místo setEntity()
(před/po)?
Chci na to udělat automatický rector, ale nemůžu to dohledat.
- David Matějka
- Moderator | 6445
@TomášVotruba vytvorit novou instanci statementu https://github.com/…642a9875f070#…
- Tomáš Votruba
- Moderator | 1114
Boží, díky. To jsem přesně potřeboval.
Jak jsi to našel, abych věděl příště. git blame
?