2017-09-09 3 views
1

Wie verwende ich Pleague v2.4 mit Slim v3.8.1?Slim 3 + Pleague 2.4 - Alias ​​(Router) wird nicht vom Container verwaltet?

dieses example Im Anschluss an habe ich versucht:

// PSR 7 standard. 
use Slim\Http\Request; 
use Slim\Http\Response; 

// Import classes. 
use Slim\App as Slim; 

use League\Container\Container; 
$container = new Container; 

// Required to enable auto wiring. 
$container->delegate(
    new \League\Container\ReflectionContainer 
); 

// Get an instance of Slim. 
$app = new Slim($container); 

ich:

Fatal error: Uncaught League\Container\Exception\NotFoundException: Alias (router) is not being managed by the container in /var/www/html/projectA/vendor/league/container/src/Container.php:266 Stack trace: #0 /var/www/html/projectA/vendor/league/container/src/Container.php(93): League\Container\Container->getFromDelegate('router', Array) #1 /var/www/html/projectA/vendor/slim/slim/Slim/App.php(239): League\Container\Container->get('router') #2 /var/www/html/projectA/vendor/slim/slim/Slim/App.php(143): Slim\App->map(Array, '/', Object(Closure)) #3 /var/www/html/projectA/public/index.php(53): Slim\App->get('/', Object(Closure)) #4 {main} thrown in /var/www/html/projectA/vendor/league/container/src/Container.php on line 266

Irgendwelche Ideen?

Antwort

1

Slim versucht, auf die router zuzugreifen, die für den hinzugefügten Container nicht definiert ist. In Slim werden sie von der \Slim\DefaultServicesProvider hinzugefügt. Sie können es jedoch nicht verwenden, da Ihr DI-Container den Array-Zugriff nicht unterstützt.

Eine Möglichkeit, dieses Problem zu beheben, ist den Slim Container als Delegierter zu setzen, dann wird die League\Container\Container die Router und alle andere Sachen durch den schlanken Behälter erhalten:

$container = new \League\Container\Container; 
$container->delegate(new \Slim\Container()); 
$app = new \Slim\App($container); 
+0

Dank für die Hilfe! – laukok