【发布时间】:2016-04-01 20:08:28
【问题描述】:
当 Slim 3.3 只注入 ContainerInterface 时,如何在控制器中访问 $app?
说明问题的代码:
$app = new \Slim\App;
$app->get('/home', 'HomeController:get');
$app->run();
class HomeController {
private $ci;
public function _construct($ci) {
$this->ci = $ci;
}
public function get($request, $response) {
$this->ci->get(...);
// How to access $app and dependencies like $app->jwt?
}
}
【问题讨论】:
-
你的 Slim 版本是什么?
\Slim\Slim::getInstance();一个选项? -
只需使用
global我认为是 DI 模式 ;) 不,读这个? stackoverflow.com/questions/32365258/… -
@ficuscr 我在帖子中添加了信息。我使用的是 3.3 版,因此不推荐使用 getInstance。
-
@MaxBündchen 您不需要获取 $app 实例。 $app 实例上没有任何内容了,所有内容都存储在容器中,这就是我们注入它的原因。
-
@MaxBündchen 这是 Slim v2 中的一种常见模式……很容易将 v2 与 v3 混淆。致命的赠品是 $app 对象是 v2 中的 Slim\Slim 和 v3 中的 Slim\App。通过注入 $app 的服务定位是 v2 的经典模式。依赖注入是 v3 的模式。