トピックを始める前に、コントローラー ディレクトリに 2 つの新しいファイルを作成します:
サービス コンテナは、オブジェクト間の依存関係の管理を一元化する設計パターンであり、アプリケーション内のサービスにアクセスして管理するための構造化された方法を提供します。
ウェブサイト内のサービスのレジストリとして機能します。
まず、CoreディレクトリにController.phpという名前のファイルを作成します。ここでは、サービス バインディングと解決の管理を担当する Container クラスを初期化します。
class Container { protected $bindings = []; public function bind($key, $resolver) { $this->bindings[$key] = $resolver; } public function resolve($key) { if (!array_key_exists($key, $this->bindings)) { throw new Exception("No matching binding found for {$key}"); } $resolver = $this->bindings[$key]; return call_user_func($resolver); } }
App クラスはコンテナのインターフェイスとして機能し、サービスにアクセスするための便利なインターフェイスを提供します。
class App { protected static $container; public static function setContainer($container) { static::$container = $container; } public static function container() { return static::$container; } public static function bind($key, $resolver) { static::container()->bind($key, $resolver); } public static function resolve($key) { return static::container()->resolve($key); } }
ブートストラップはアプリケーションのポイントであり、ここですべてがセットアップおよび初期化されます。
$container = new Container(); $container->bind('Core\Database', function () { $config = require base_path('config.php'); return new Database($config['database']); }); App::setContainer($container);
この中で、ブートストラップ プロセス:
App::resolve() メソッドを使用して、コントローラーのコンテナからサービスを解決できます。
$db = App::resolve('Core\Database');
これで、サービス コンテナが適切に構築され、プロジェクトが正常に動作していることがわかります。
しっかりと理解していただけたと思います。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3