1
私はDIに問題があります。それは私には新しいものです。私は私のプロジェクトのクラスでDIとしてコンテナをさせていただきたいと思いますが、私はエラーを得た:スリム3のクラスで依存性注入を受ける
//dependencies.php
$container = $app->getContainer();
$container[Project::class] = function ($c) {
return new Project($c);
};
:私のDICの設定ここで
use Slim\Container;
class Project {
protected $ci;
public function __construct(Container $ci) {
$this->ci = $ci;
}
}
:私はクラスのプロジェクトを作成し
Argument 1 passed to Project::__construct() must be an instance of Slim\Container, none given
ここで私のコードindex.phpはコードを実行する
// Instantiate the app
$settings = require __DIR__ . '/../app/configs/settings.php';
$app = new \Slim\App($settings);
// Set up dependencies
require __DIR__ . '/../app/configs/dependencies.php';
// Register middleware
require __DIR__ . '/../app/configs/middleware.php';
// Register routes
require __DIR__ . '/../app/configs/routes.php';
require __DIR__ . '/../app/model/Project.php';
$app->get('/project/{id}', function (Request $request, Response $response) {
$project = new Project();
return $response;
});
$app->run();
私はどこで失敗したのか知りません、スリムなブラジを使ってみましたが、私は同じ結果を得ました。私はまた、代わりに、コンテナの文字列を与えることを試みたが、私はまだヌル取得プロジェクトに渡さ
どちらも機能しています。しかし、私は任意のパラメータを与えたり、コンテナを呼び出すことなく、プロジェクトクラスを呼びたいと思います。 DIを使って、暗黙の呼び出しではないと思いますか? – Nirundthan
「DIC」は「依存性注入コンテナ」を表し、SlimはデフォルトでPimpleを使用します。オブジェクトをコンテナに登録し、必要に応じてそれらを引き出します。 [よりスマートなDICは、それ自体で行うことができます](http://stackoverflow.com/q/40176059/6850820)。 答えは:いいえ、あなたは '' Project'クラスを生成者に渡さずにインスタンス化することはできません。手作業でも '$ container'でも引数を渡す必要があります。 –
この素晴らしい答えをありがとう – Nirundthan