<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 定制服務 框架中所有功能都以服務的形式扁平化設計,當然也支持開發者自行擴展服務用于自身業務擴展。 [TOC] ## 目錄結構 * system/config/service.php 服務聲明配置 * system/service 服務文件存放位置 ## 創建服務 ### 命令創建 使用命令行可以快速創建服務 ``` php hd make:service HdForm ``` > 如果定義的服務與系統服務重名時,將優先使用系統服務用戶定義的服務將失效。 為了防止自定義服務與系統服務重名,建議命名上使用前綴修飾如上例中的Form服務建議使用 HdFormProvider 這樣的約束。 執行以上命令后會創建出HdForm服務,共創建三個文件,文件說明如下: 1. HdForm.php 服務功能類,實現功能實體代碼 2. HdFormProvider.php 服務提供者,用于注入到框架服務容器中,方便在從容器中提取服務使用 3. HdFacade.php 外觀提供者,用于簡便調用服務使用 ### 設置配置 創建完文件后服務并不可以使用需要添加相應配置,配置文件為 config/service.php ,針對上面創建的服務設置配置項如下: ``` <?php return [ //服務提供者 'providers' => [ 'system\service\HdForm\HdFormProvider', ], //服務外觀 'facades' => [ 'HdForm' => 'system\service\HdForm\HdFormFacade', ] ]; ``` ## 服務功能類 上例中創建的文件HdForm.php 為服務功能類,實現功能實體代碼,代碼如下: ``` <?php namespace system\service\HdForm; class HdForm { //構造函數 public function __construct() { } public function select() { echo '恭喜你,服務創建成功! 這是服務方法執行的結果'; } } ``` ## 服務提供者 上例中創建的文件HdForm.php 為服務提供者。 服務提供者用于注入到框架服務容器IOC中,這樣我們就可以在控制器、中間件、路由器等任何位置使用服務了。代碼如下: ``` <?php namespace system\service\HdForm; use houdunwang\framework\build\Provider; class HdFormProvider extends Provider { //延遲加載 public $defer = true; //服務運行時自動執行的方法 public function boot() { } public function register() { $this->app->single( 'HdForm', function ( $app ) { return new HdForm($app); } ); } } ``` 設置好服務和配置項后我們就可以使用以下方法使用服務了。 ``` <?php namespace admin\controller; class Index{ public function index(){ //App::make() 用于從IOC容器中載入服務 App::make('HdForm')->select(); } } ``` ## 外觀處理類 上例中創建的文件 HdFacade.php 外觀提供者,外觀類并不是必須的,外觀類的作用就是調用服務簡便了而已。 用于簡便調用服務使用,使用外觀調用需要設置配置項才有效。 在上例中我們創建好服務并設置了配置項后,就可以使用 HdForm::test() 的形式調用服務功能類中的方法了。代碼如下: ``` <?php namespace system\service\HdForm; use houdunwang\framework\build\Facade; class HdFormFacade extends Facade{ public static function getFacadeAccessor(){ return 'HdForm'; } } ``` 當創建了外觀后,我們就可以不使用 App::make()實例化服務了,直接使用服務類調用了。 ``` <?php namespace admin\controller; class Index{ public function index(){ //使用App服務實例出Form服務,然后執行服務中的select方法 HdForm::select(); } } ``` ## 注冊方式 將服務注冊到容器要在服務提供者Provider中完成,有以下幾種注冊方式。 #### 使用閉包注冊 上例中我們就是使用閉包進行的注冊 ``` public function register() { $this->app->single( 'HdForm', function ( $app ) { return new HdForm($app); } ); } ``` #### 使用類名注冊 ``` public function register() { $this->app->single( 'HdForm', 'system\service\HdForm\HdForm' ); } ``` ## 注冊類型 服務最終會返回對象實例,根據情況不同我們可能需要“單例”返回或“多例”返回。框架為不同情況提供了不同的注冊指令。 #### bind注冊方法 bind由三個參數構成,第三個參數為true時為單例模式,即只生成一個服務實例對象。為false(默認)時每次調用服務都新生成一個服務對象。 ``` public function register() { $this->app->bind( 'HdForm', function ( $app ) { return new HdForm($app); },true); } ``` #### single注冊方法 使用single方法可注冊單例服務,請求中使用了多次服務只生成一個實例對象。 ``` public function register() { $this->app->single( 'HdForm', function ( $app ) { return new HdForm($app); } ); } ``` ### instance注冊方法 使用 instance 方法注冊服務也是返回單例,只是第二個參數只能為對象。 ``` public function register() { $this->app->instance( 'HdForm', new HdForm() ); } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看