如何在Slim 3路由中注入全局变量?

时间:2016-06-23 16:47:17

标签: php dependency-injection slim

如何在Slim 3中注入全局变量?我找到了这个How can i define global variables in slim framework,但它引用了Slim 2。

我有一个配置Google API的单身人士:

NA

我在class Google_Config { private static $CLIENT_ID = "..."; private static $CLIENT_SECRET = "..."; private static $REDIRECT_URI = "..."; private static $instance = null; private $client = null; private $scopes = [...]; private function __construct() { $this->client = new Google_Client(); $this->client->setClientId(self::$CLIENT_ID); $this->client->setClientSecret(self::$CLIENT_SECRET); $this->client->setRedirectUri(self::$REDIRECT_URI); $this->client->setScopes($this->scopes); } public static function get() { if(self::$instance == null) { self::$instance = new Google_Config(); } return self::$instance; } } 中定义全局变量,如下所示:

index.php

我尝试了上面引用的文章中的一些旧方法:

 $config = Google_Config::get();

但我明白了:

$app->config = Google_Config::get(); // index.php

// route.php 
$app->get('/login', function($request, $response, $args) {
    $google = $this->get("AS_Google_Config");
    var_dump($google); // for testing
    return $this->renderer->render($response, 'login.phtml');
});

我应该如何使用此单例,但能够将其作为依赖项注入,以便可以在所有路由中使用它?基于我在文档中看到的内容(http://www.slimframework.com/docs/objects/router.html#container-resolution),似乎我需要将构造函数设为公共。

2 个答案:

答案 0 :(得分:6)

我就是编写该部分文档的人。

您需要做的是在容器中定义它。

$container['google_client'] = function ($c) { 
    return Google_Config::get(); 
};

则...

$app->get('/login', function($request, $response, $args) {
    $google = $this->get("google_client"); // <--
    var_dump($google); // for testing
    return $this->renderer->render($response, 'login.phtml');
});

答案 1 :(得分:0)

使用php env。例如,您可以使用vlucas / phpdotenv。从作曲家那里获得它-Packagist