【发布时间】:2016-05-09 14:35:17
【问题描述】:
我正在使用联赛/路线,我想将我的容器注入控制器。这是我已经拥有的:
提供RouteCollection:
$this->getContainer()->share('route', function () {
$route = require $this->getContainer()->get('baseDir').'/config/routes.php';
return $route;
});
baseDir/config/routes.php:
<?php
use League\Route\Strategy\ParamStrategy;
use League\Container\ReflectionContainer;
$routes = (new \League\Route\RouteCollection)
->setStrategy((new ParamStrategy)->setContainer(new ReflectionContainer));
// The line above is here because ParamStrategy otherwise throws
// Uncaught exception 'RuntimeException' with message 'To use the parameter strategy,
// the container must implement the (::call) method.
$routes->get('/', 'Controller\PostController::index');
return $routes;
我的前端控制器:
/** @var RouteCollection $route */
$route = $this->getContainer()->get('route');
/** @var ServerRequest $request */
$request = $this->getContainer()->get('request');
/** @var Response $response */
$response = $this->getContainer()->get('response');
/** @var SapiEmitter $emitter */
$emitter = $this->getContainer()->get('emitter');
$response = $route->dispatch($request, $response);
$emitter->emit($response);
我不知道应该在哪里调用控制器对象上的setContainer 方法,因为它只存在于$route->dispatch($request, $response); 中。将该容器注入我的控制器的正确方法是什么?
【问题讨论】:
标签: php routing containers