Slim 3 + Pleague 2.4 - 别名(路由器)未由容器管理?
Slim 3 + Pleague 2.4 - Alias (router) is not being managed by the container?
如何使用 Pleaguev2.4 with Slim v3.8.1?
按照这个 example,我尝试了:
// 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);
我得到:
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
有什么想法吗?
Slim 正在尝试访问未在您添加的容器上定义的 router
。在 Slim 中,它们将由 \Slim\DefaultServicesProvider
添加。
但是你不能使用它,因为你的 DI Container 不支持数组访问。
解决此问题的一个选项是将 Slim 容器设置为委托,然后 League\Container\Container
将通过 slim 容器获取路由器和所有其他内容:
$container = new \League\Container\Container;
$container->delegate(new \Slim\Container());
$app = new \Slim\App($container);
如何使用 Pleaguev2.4 with Slim v3.8.1?
按照这个 example,我尝试了:
// 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);
我得到:
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
有什么想法吗?
Slim 正在尝试访问未在您添加的容器上定义的 router
。在 Slim 中,它们将由 \Slim\DefaultServicesProvider
添加。
但是你不能使用它,因为你的 DI Container 不支持数组访问。
解决此问题的一个选项是将 Slim 容器设置为委托,然后 League\Container\Container
将通过 slim 容器获取路由器和所有其他内容:
$container = new \League\Container\Container;
$container->delegate(new \Slim\Container());
$app = new \Slim\App($container);