Po upgradu nette na 2.4 – ReflectionException #-1
- Croc
- Člen | 270
Zdravím,
mám takový problém po upgradu Nette na verzi 2.4 (z 2.3.x).
Tracy mi vyhazuje (řádek 470):
ReflectionException #-1
Class array does not exist
File: .../vendor/nette/di/src/DI/ContainerBuilder.php:470
460:
461: $def = $this->definitions[$name];
462: $factoryClass = $def->getFactory() ? $this->resolveEntityClass($def->getFactory()->getEntity(), $recursive) : NULL; // call always to check entities
463: if ($class = $def->getClass() ?: $factoryClass) {
464: $def->setClass($class);
465: if (!class_exists($class) && !interface_exists($class)) {
466: throw new ServiceCreationException("Type $class used in service '$name' not found or is not class or interface.");
467: }
468: self::checkCase($class);
469: if (count($recursive) === 1) {
470: $this->addDependency(new ReflectionClass($factoryClass ?: $class)); // zde je označený řádek
471: }
472:
473: } elseif ($def->getAutowired()) {
474: throw new ServiceCreationException("Unknown type of service '$name', declare return type of factory method (for PHP 5 use annotation @return)");
Jsem na Linuxu, PHP 7.0.8–3.
Bootstrap:
<?php
require __DIR__ . '/../vendor/autoload.php';
use Nette\Forms\Container,
Nextras\Forms\Controls;
Container::extensionMethod('addOptionList', function (Container $container, $name, $label = NULL, array $items = NULL) {
return $container[$name] = new Controls\OptionList($label, $items);
});
Container::extensionMethod('addMultiOptionList', function (Container $container, $name, $label = NULL, array $items = NULL) {
return $container[$name] = new Controls\MultiOptionList($label, $items);
});
Container::extensionMethod('addDatePicker', function (Container $container, $name, $label = NULL) {
return $container[$name] = new Controls\DatePicker($label);
});
Container::extensionMethod('addDateTimePicker', function (Container $container, $name, $label = NULL) {
return $container[$name] = new Controls\DateTimePicker($label);
});
Container::extensionMethod('addTypeahead', function(Container $container, $name, $label = NULL, $callback = NULL) {
return $container[$name] = new Controls\Typeahead($label, $callback);
});
$configurator = new Nette\Configurator;
$configurator->setDebugMode(true); // enable for your remote IP
$configurator->enableDebugger(__DIR__ . '/../log');
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->register();
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
//$configurator->addConfig(__DIR__ . '/config/config.production.neon');
$container = $configurator->createContainer();
return $container;
Vůbec netuším čím by to mohlo být. Nevíte někdo?
P.S.:
Ještě to ukazuje Last Muted Error (řádek 104):
Warning: file_get_contents(/var/www/workspace/app/../temp/cache/Nette.Configurator/Container_e37e695e37.php.meta): failed to open stream: No such file or directory
.../vendor/nette/di/src/DI/ContainerLoader.php:104
94: if ((@include $file) === FALSE) { // @ - error escalated to exception
95: throw new Nette\IOException("Unable to include '$file'.");
96: }
97: flock($handle, LOCK_UN);
98: }
99:
100:
101: private function isExpired($file)
102: {
103: if ($this->autoRebuild) {
104: $meta = @unserialize(file_get_contents("$file.meta")); // @ - file may not exist
105: return empty($meta[0]) || DependencyChecker::isExpired(...$meta);
106: }
107: return FALSE;
108: }
- CZechBoY
- Člen | 3608
https://forum.nette.org/…nexception-1
Co tobě přijde za ty proměnný na řádku 470?
Editoval CZechBoY (5. 7. 2016 13:51)
- David Grudl
- Nette Core | 8228
Stejně by bylo fajn, kdybys mohl napsat, co obsahují ty proměnné. Jinak s tím těžko něco udělám.
- Martk
- Člen | 661
@DavidGrudl Padá to na tomhle:
https://github.com/…xtension.php#L77
Protože:
https://api.nette.org/…der.php.html#509
obsahuje reflekci https://github.com/…/Factory.php#L15
a jako první argument je typ array, když to obrátím na @return
Nette\Application\Routers\RouteList|array , tak je to v pořádku.
Jestli to je nesrozumitelné, tak to napíšu ještě jednou a více podrobněji.
Editoval Antik (7. 7. 2016 9:42)