Doctrine setEntity is deprecated

Gavrilo
Člen | 46
+
0
-

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.

https://prnt.sc/gpkwq3

Zdrojový kód: https://github.com/iGavrilo/DoGa

Neviem nájsť chybu v podstate som tam ani nič nemenil …

Ďakujem

Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

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];
David Matějka
Moderator | 6445
+
0
-

pouzivas starou verzi kdyby/doctrine, aktualizuj ji

Gavrilo
Člen | 46
+
0
-

David Matějka napsal(a):

pouzivas starou verzi kdyby/doctrine, aktualizuj ji

Ďakujem bol to starý projekt tak som čakal že to pôjde na pohodu … Ale pomohlo ďakujem

Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

@TomášVotruba vytvorit novou instanci statementu https://github.com/…642a9875f070#…

Tomáš Votruba
Moderator | 1114
+
0
-

Boží, díky. To jsem přesně potřeboval.

Jak jsi to našel, abych věděl příště. git blame?