2016-04-01 16 views
2

コントローラ内の$ appへのアクセス方法は、Slim 3.3がContainerInterfaceだけを注入するためですか?その後)

class Anorexic extends \Slim\App { 
    private static $_instance; 
    public static function getInstance(){ 
     if(empty(self::$_instance){ 
      self::$_instance = new self(); 
     } 
     return self::$_instance; 
    } 
} 

このようなあなたの初期設定を変更する。

$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? 
    } 
} 
+0

private $slim; /** * @param \Psr\Log\LoggerInterface $logger * @param \App\DataAccess $dataaccess * @param \App\$app $slim */ public function __construct(LoggerInterface $logger, _DataAccess $dataaccess, $slim) { $this->logger = $logger; $this->dataaccess = $dataaccess; $this->slim = $slim; } 

は今、あなたはちょうどこのようにそれを呼びましたあなたのスリムバージョンは何ですか? '\ Slim \ Slim :: getInstance();'オプション? – ficuscr

+0

ちょうど 'グローバル'私はDIパターンですと思う;)Naw、これをお読みください? http://stackoverflow.com/questions/32365258/access-app-in-class-in-slim-framework-3 – ficuscr

+0

@ficuscrポストに情報を追加しました。私はバージョン3.3を使用しているので、getInstanceは非推奨です。 –

答えて

-1

あなたはSlim::getInstance();を模倣するために、独自の 'シングルトン' を作ることができます:

// $app = new \Slim\App; 
$app = Anorexic::getInstance(); 

コードの問題を説明します

\Slim\Appインスタンスをコードのどこにでも呼び出すことができますg Anorexic::getInstance();もちろん、自宅でこれを試してはいけません。P

1

これは厳しいものでした。

スリム3は依存性注入を頻繁に使用するため、使いたいと思うかもしれません。

最初にあなたのdependencies.phpの中に、$アプリケーションをつかんでコンテナに入れて後でコントローラに注入する必要があります。

// Generic Controller 
$container['App\Controllers\_Controller'] = function ($c) { 
    return new _Controller($c->get('slim')); 
}; 

今すぐあなたのcontroller.php上:

$container['slim'] = function ($c) { 
    global $app; 
    return $app; 
}; 

は、その後、あなたはそれを注入するようになった

$this->slim->doSomething(); 
関連する問題