Slim 3 + Pleague 2.4 - Псевдоним (маршрутизатор) не управляется контейнером?

Как использовать Pleague v2.4 с Slim v3.8.1?

Следуя этому примеру, я попробовал:

// 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);

Я получил:

Неустранимая ошибка: Uncaught League \ Container \ Exception \ NotFoundException: псевдоним (маршрутизатор) не управляется контейнером в /var/www/html/projectA/vendor/league/container/src/Container.php:266 Трассировка стека: # 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} добавлен в /var/www/html/projectA/vendor/league/container/src/Container.php в строке 266

Любые идеи?


person laukok    schedule 09.09.2017    source источник


Ответы (1)


Slim пытается получить доступ к router, который не определен в добавленном вами контейнере. В Slim они будут добавлены \Slim\DefaultServicesProvider. Но вы не можете использовать его, потому что ваш контейнер DI не поддерживает доступ к массиву.

Вариант решения этой проблемы - установить контейнер Slim в качестве делегата, тогда League\Container\Container получит маршрутизатор и все остальное через тонкий контейнер:

$container = new \League\Container\Container;
$container->delegate(new \Slim\Container());
$app = new \Slim\App($container);
person jmattheis    schedule 09.09.2017