Ground Sunlight

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

ユーザ用ツール

サイト用ツール


apricot:usage:ja:provider

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:usage:ja:provider [2020/08/28 19:32]
y2sunlight [Providerクラス]
apricot:usage:ja:provider [2020/09/03 13:46] (現在)
y2sunlight [Apricot サービスプロバイダー]
行 1: 行 1:
-> 編集中 
- 
----- 
- 
 ====== Apricot サービスプロバイダー ====== ====== Apricot サービスプロバイダー ======
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-07-29//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-07-29//
行 21: 行 17:
   * [[apricot:usage:ja:validation|Apricot バリデーション]]   * [[apricot:usage:ja:validation|Apricot バリデーション]]
   * Apricot サービスプロバイダー   * Apricot サービスプロバイダー
 +  * [[apricot:usage:ja:authentication|Apricot ユーザ認証]]
   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]
  
 ---- ----
  
-Apricotでは、DIコンテナーに [[https://github.com/thephpleague/container|League/Container]] を使用しています。League/Container ではサービスプロバイダーを使い、サービスをシングトンとして登録することができます。 +Apricotでは、DIコンテナーに [[https://github.com/thephpleague/container|League/Container]] を使用しています。Apricotのスケルトンでは、League/Container サービスプロバイダー機能利用して、サービス(またはモデなどのクラスも含まれる)を登録することができます。サービスはアリレション全体で共有できます。即ちシングルトンとして利用できます。
- +
-Apricotのスケルトンでは、サービスプロバイタの簡単な例題を提供してます。+
  
 \\ \\
行 61: 行 56:
     /**     /**
      * 提供される配列は、サービスがこのサービスプロバイダーによって提供されていることをコンテナーに知らせるための方法です。      * 提供される配列は、サービスがこのサービスプロバイダーによって提供されていることをコンテナーに知らせるための方法です。
-     * このサービスプロバイダーを介して登録されるすべてのサービスには、の配列にエイリアスが追加されている必要があります。+     * このサービスプロバイダーを介して登録されるすべてのサービスには、の配列にエイリアスが追加されている必要があります。
      * そうでない場合は無視されます。      * そうでない場合は無視されます。
      *      *
行 79: 行 74:
         // Sample         // Sample
         $this->getContainer()         $this->getContainer()
-        ->add('SampleService', \App\Services\SampleService::class, true) +             ->add('SampleService', \App\Services\SampleService::class, true) 
-        ->addArgument('User')+             ->addArgument('User')
         ;         ;
- 
         $this->getContainer()->add('User', \App\Models\User::class);         $this->getContainer()->add('User', \App\Models\User::class);
      }      }
行 88: 行 82:
 </code> </code>
  
-このクラは、アプリーショのモデル及びサービスのマップを提供します。現版Apricotで、モデルはユーザモデル( User )だけで、サービスについては存在しません。モデルやサービス追加る場合は、上例に習って適宜追加して下さい+スケルトでは[[apricot:usage:ja:model#サービス|サービスのサンル]]として ''SampleService'' クラスを提供しています。クラスコントラクタ''User'' モデルを与えて作ります。
  
-現版のApricotでは、サービスは存在ませんが、サービとして以下フォルダが予約されます。+''SampleService'' クラスをサービスプロバイターに登録するに、コンテナの''add()'' メソッドを使用、その引数は、エイリアス名、登録するクラス、そして共有フラグです。共有フラグtrueの場合このクラはシングルトンとして動作します。''addArgument()'' メソッドは登録するクラスコンストラクタに与える引数を定義します。この引数もまた''add()'' メソッドで登録しおく必要があります。
  
-<code> +サービス(またはモデル)をサービスプロバイターに登録する場合は上例に習って適宜追加して下さい。League/Container のサービスプロバイダーについての詳細は[[https://container.thephpleague.com/3.x/service-providers/|こちら]]をご覧ください。
-/apricot/app/Services +
-</code> +
- +
-、League/Container のサービスプロバイダーについての詳細は[[https://container.thephpleague.com/3.x/service-providers/|こちら]]をご覧ください。+
  
 \\ \\
  
-===== App\Foundation\Containerクラス ===== +===== Containerクラス =====
- +
-App\Foundation\Containerクラスは、\League\Container\Container クラスを生成し、Apricotのサービスプロバイダー(Provider)を登録したクラスで、シングルトンとして動作します。+
  
-サービスの使用者は、''App\Foundation\Container''持っている [[https://www.php-fig.org/psr/psr-11/|PSR-11]] に準じた ''get()'' と ''has()'' を使っサービスを利用することができます。+サービスプロバイダーで登録したサービス(またはモデル)を取得するには、''App\Foundation\Container'' クラスを使用します。このクラスは、''\League\Container\Container'' をシングルトンにしたもので、以下のメソッドあります。これらのメソッドは [[https://www.php-fig.org/psr/psr-11/|PSR-11]] に準拠します。
  
 使用法: ** Container::{メソッド} ** 使用法: ** Container::{メソッド} **
行 111: 行 99:
 |mixed get(string $id)|識別子idでコンテナのエントリを検索して返します。| |mixed get(string $id)|識別子idでコンテナのエントリを検索して返します。|
 |bool has(string $id)|コンテナが指定された識別子idのエントリを返すことができる場合はtrueを返します。| |bool has(string $id)|コンテナが指定された識別子idのエントリを返すことができる場合はtrueを返します。|
- 
-{{fa>folder-open-o}} ** /apricot/app/Foundation ** 
-<code php Container.php> 
-<?php 
-namespace App\Foundation; 
- 
-use Apricot\Foundation\Singleton; 
-use App\Provider; 
- 
-/** 
- * Container class for service 
- * 
- * @method static Container getInstance() Gets the Container instance. 
- * @method static mixed get(string $id) Finds an entry of the container by its identifier and returns it. 
- * @method static bool has(string $id) Returns true if the container can return an entry for the given identifier. 
- */ 
-class Container extends Singleton 
-{ 
-    /** 
-     * Create Container instance. 
-     * @return \League\Container\Container 
-     */ 
-    protected static function createInstance() 
-    { 
-        $container = new \League\Container\Container; 
-        $container->addServiceProvider(new Provider()); 
-        return $container; 
-    } 
-} 
-</code> 
  
 \\ \\
  
-===== DIコンテナの使用例 =====+===== 使用例 =====
  
-=== スタブコントローラ ===+スタブコントローラのindexアクションには、DIコンテナの使用例があります。
  
-DIコンテナをテストするために、スタブコントローラを以下のように修正します。 +{{fa>folder-open-o}} ** /your-project/app/Controllers **
- +
-{{fa>folder-open-o}} ** /apricot/app/Controllers **+
 <code php StubController.php> <code php StubController.php>
-<?php +public function index(int $no=null) 
-namespace App\Controllers;+
 +    $title = "Stub {$no}";
  
-use App\Foundation\Container; 
-use App\Foundation\Controller; 
- 
-/** 
- * Stub Controller 
- */ 
-class StubController extends Controller 
-{ 
     /**     /**
-     * Index Page for this controller. +     * @var \App\Services\SampleService $service
-     * +
-     * @return \Apricot\Foundation\Response+
      */      */
-    public function index(int $no=null) +    $service = Container::get('SampleService'); 
-    { +    $count = $service->getUserCount(); 
-        $title = "Stub {$no}"; +    $messages[] = "Number of registered users : {$count}";
- +
-        /* +
-         * 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]); +    return render('stub',['title'=>$title,'messages'=>$messages]);
-    }+
 } }
 </code> </code>
  
-  * ''Container::get('user')''ザモデルを生成します。 +''Container'' シングルトンの ''get()'' メソッド、サビスプロバイダでシングトンとして登録した ''SampleService''インスタンスを取得します。このイスタンスはアリケション全体で共有されます。
-  * ユザモデの ''findAll()'' を実行して全ユーザを取得します。 +
-  * ユーザ数を表示するために、テンプト変数 ''$messages'' をセットします。+
  
 \\ \\
apricot/usage/ja/provider.1598610778.txt.gz · 最終更新: 2020/08/28 19:32 by y2sunlight