Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:ext:di-container

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:ext:di-container [2020/05/26 15:47]
y2sunlight [サービスプロバイター]
apricot:ext:di-container [2020/05/26 16:42] (現在)
y2sunlight [Providerクラス]
行 1: 行 1:
-> 編集中 
- 
------ 
- 
 ====== Apricot DIコンテナー ====== ====== Apricot DIコンテナー ======
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-25//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-25//
行 157: 行 153:
 League/Container でサービスプロバイダーを構築するには以下のステップに従います。 League/Container でサービスプロバイダーを構築するには以下のステップに従います。
  
-  - League/Container の ''AbstractServiceProvider'' クラスを拡張して 独自のサービスプロバイダーを作ります。+  - League/Container の 基本サービスプロバイダークラス( ''AbstractServiceProvider'' )を拡張して 独自のサービスプロバイダーを作ります。
   - League/Container の ''Container'' クラスに 独自のサービスプロバイダーを登録します。   - League/Container の ''Container'' クラスに 独自のサービスプロバイダーを登録します。
-  - サービスの使用者は ''Container''クラス の ''get()'' を使ってサービスプロバイダーからサービスのインスタンスを作ります。 
  
 Apricotでは、独自のサービスプロバイダーとして ''App\Provider'' クラスを定義し、それを登録する ''App\Foundation\Container'' クラスをシングルトンとして実装します。サービスの使用者は、''App\Foundation\Container''が持っている [[https://www.php-fig.org/psr/psr-11/|PSR-11]] に準じた ''get()'' と ''has()'' を使ってサービスを利用することができます。 Apricotでは、独自のサービスプロバイダーとして ''App\Provider'' クラスを定義し、それを登録する ''App\Foundation\Container'' クラスをシングルトンとして実装します。サービスの使用者は、''App\Foundation\Container''が持っている [[https://www.php-fig.org/psr/psr-11/|PSR-11]] に準じた ''get()'' と ''has()'' を使ってサービスを利用することができます。
行 166: 行 161:
  
 ==== Providerクラス ==== ==== Providerクラス ====
-> TODO:+ 
 +以下に、League/Container の 基本サービスプロバイダークラス( AbstractServiceProvider )を拡張したApricot独自のサービスプロバイダークラス( Provider )を以下に示します。
  
 {{fa>folder-open-o}} ** /apricot/app ** {{fa>folder-open-o}} ** /apricot/app **
行 207: 行 203:
 } }
 </code> </code>
 +
 +このクラスは、名前空間Appの直下に存在し、アプリケーションのモデル及びサービスのマップを提供します。現版のApricotでは、モデルはユーザモデル( User )だけで、サービスについては存在しません。モデルやサービスを追加する場合は、上例に習って適宜追加して下さい。
 +
 +現版のApricotでは、サービスは存在しませんが、サービス用として以下のフォルダが予約されています。
 +
 +<code>
 +/apricot/app/Services
 +</code>
 +
 +尚、League/Container のサービスプロバイダーについての詳細は[[https://container.thephpleague.com/3.x/service-providers/|こちら]]をご覧ください。
  
 \\ \\
  
-==== Containerクラス ==== +==== App\Foundation\Containerクラス ==== 
-> TODO: + 
-> TODO: PSR-11についも書く+App\Foundation\Containerクラスは、\League\Container\Container クラスを生成し、Apricotのサービスプロバイダー(Provider)を登録したクラスで、シングルトンとし動作します。
  
 使用法: ** Container::{メソッド} ** 使用法: ** Container::{メソッド} **
  
 ^メソッド^機能^ ^メソッド^機能^
-|mixed get(string $id)|Finds an entry of the container by its identifier and returns it.+|mixed get(string $id)|識別子idでコンテナのエントリを検索して返します。
-|bool has(string $id)|Returns true if the container can return an entry for the given identifier.|+|bool has(string $id)|コンテナが指定された識別子idのエントリを返すことができる場合はtrueを返します。|
  
 {{fa>folder-open-o}} ** /apricot/app/Foundation ** {{fa>folder-open-o}} ** /apricot/app/Foundation **
行 250: 行 256:
 </code> </code>
  
-==== テスト実行 ==== +\\ 
-TODOStabControllerの例+ 
 +==== サービスコンナの使用例 ==== 
 + 
 +=== タブコンローラ === 
 + 
 +サービスコンテナをテストするために、スタブコントローラを以下のように修正します。 
 + 
 +{{fa>folder-open-o}} ** /apricot/app/Controllers ** 
 +<code php StubController.php> 
 +namespace App\Controllers; 
 + 
 +use App\Foundation\Container; 
 +use App\Foundation\Controller; 
 + 
 +/** 
 + * Stubコントローラ 
 + */ 
 +class StubController extends Controller 
 +
 +    /** 
 +     * Stub Page 
 +     * @return \Core\Foundation\Response 
 +     */ 
 +    public function index(int $no=null) 
 +    { 
 +        $title = "Stub {$no}"; 
 + 
 +        /* 
 +         * Example for Container 
 +         * @var \App\Models\User $user 
 +         */ 
 +        $user = Container::get('user'); 
 +        $userCount = count($user->findAll()); 
 +        $messages[] = "Number of registered users : {$userCount}"; 
 + 
 +        return render('stub',['title'=>$title,'messages'=>$messages]); 
 +    } 
 +
 +</code> 
 + 
 +  * ''Container::get('user')'' でユーザモデルを生成します。 
 +  * ユーザモデルの ''findAll()''実行して全ユーザのリストを取得します。 
 +  * ユーザ数を表示するために、テンプレート変数 ''$messages'' をセットします。 
 + 
 +\\ 
 + 
 +=== テスト実行 === 
 + 
 +Apricotのホーム画面を表示して、[Menu2]をクリックして下さい。 
 + 
 +[{{apricot:ext:ext09.png?nolink}}] 
 +■ 画面にユーザ数が表示されます 
 + 
 +<code> 
 +Number of registered users 
 +</code> 
 + 
 +\\ 
 + 
  
 \\ \\
  
apricot/ext/di-container.1590475655.txt.gz · 最終更新: 2020/05/26 15:47 by y2sunlight