<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] ### **1、簡介** [服務提供者](http://laravelacademy.org/tags/%e6%9c%8d%e5%8a%a1%e6%8f%90%e4%be%9b%e8%80%85 "View all posts in 服務提供者")是所有[Laravel](http://laravelacademy.org/tags/laravel "View all posts in Laravel")應用啟動的中心,你自己的應用以及所有Laravel的核心服務都是通過服務提供者啟動。 但是,我們所謂的“啟動”指的是什么?通常,這意味著[注冊](http://laravelacademy.org/tags/%e6%b3%a8%e5%86%8c "View all posts in 注冊")事物,包括注冊[服務容器](http://laravelacademy.org/tags/%e6%9c%8d%e5%8a%a1%e5%ae%b9%e5%99%a8 "View all posts in 服務容器")綁定、事件監聽器、中間件甚至路由。服務提供者是應用配置的中心。 如果你打開Laravel自帶的`config/app.php`文件,將會看到一個`providers`數組,這里就是應用所要加載的所有服務提供者類,當然,其中很多是[延遲](http://laravelacademy.org/tags/%e5%bb%b6%e8%bf%9f "View all posts in 延遲")加載的,也就是說不是每次請求都會被加載,只有真的用到它們的時候才會加載。 本章里你將會學習如何編寫自己的服務提供者并在Laravel應用中注冊它們。 ### **2、編寫服務提供者** 所有的服務提供者繼承自`Illuminate\Support\ServiceProvider`類。繼承該抽象類要求至少在服務提供者中定義一個方法:`register`。在`register`方法內,你唯一要做的事情就是綁事物到服務容器,不要嘗試在其中注冊任何時間監聽器,路由或者任何其它功能。 通過Artisan命令`make:provider`可以簡單生成一個新的提供者: ~~~ php artisan make:provider RiakServiceProvider ~~~ #### **register方法** 正如前面所提到的,在`register`方法中只綁定事物到服務容器,而不要做其他事情,否則話,一不小心就能用到一個尚未被加載的服務提供者提供的服務。 現在讓我們來看看一個基本的服務提供者長什么樣: ~~~ <?php namespace App\Providers; use Riak\Connection; use Illuminate\Support\ServiceProvider; class RiakServiceProvider extends ServiceProvider{ /** * 在容器中注冊綁定. * * @return void */ public function register() { $this->app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection(config('riak')); }); } } ~~~ 該服務提供者只定義了一個`register`方法,并使用該方法在服務容器中定義了一個`Riak\Contracts\Connection`的實現。 #### **boot方法** 如果我們想要在服務提供者中注冊視圖composer該怎么做?這就要用到`boot`方法了。該方法在所有服務提供者被注冊以后才會被調用,這就是說我們可以在其中訪問框架已注冊的所有其它服務: ~~~ <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class EventServiceProvider extends ServiceProvider{ /** * Perform post-registration booting of services. * * @return void */ public function boot() { view()->composer('view', function () { // }); } /** * 在容器中注冊綁定. * * @return void */ public function register() { // } } ~~~ **boot方法的[依賴注入](http://laravelacademy.org/tags/%e4%be%9d%e8%b5%96%e6%b3%a8%e5%85%a5 "View all posts in 依賴注入")** 我們可以在`boot`方法中類型提示依賴,服務容器會自動注冊你所需要的依賴: ~~~ use Illuminate\Contracts\Routing\ResponseFactory; public function boot(ResponseFactory $factory){ $factory->macro('caps', function ($value) { // }); } ~~~ ### **3、注冊服務提供者** 所有服務提供者都是通過配置文件`config/app.php`中進行注冊,該文件包含了一個列出所有服務提供者名字的`providers`數組,默認情況下,其中列出了所有核心服務提供者,這些服務提供者啟動Laravel核心組件,比如郵件、隊列、緩存等等。 要注冊你自己的服務提供者,只需要將其追加到該數組中即可: ~~~ 'providers' => [ // 其它服務提供者 App\Providers\AppServiceProvider::class, ], ~~~ ### **4、延遲加載服務提供者** 如果你的提供者僅僅只是在服務容器中注冊綁定,你可以選在延遲加載該綁定直到注冊綁定真的需要時再加載,延遲加載這樣的一個提供者將會提升應用的性能,因為它不會在每次請求時都從文件系統加載。 想要延遲加載一個提供者,設置`defer`屬性為`true`并定義一個`provides`方法,該方法返回該提供者注冊的服務容器綁定: ~~~ <?php namespace App\Providers; use Riak\Connection; use Illuminate\Support\ServiceProvider; class RiakServiceProvider extends ServiceProvider{ /** * 服務提供者加是否延遲加載. * * @var bool */ protected $defer = true; /** * 注冊服務提供者 * * @return void */ public function register() { $this->app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection($app['config']['riak']); }); } /** * 獲取由提供者提供的服務. * * @return array */ public function provides() { return ['Riak\Contracts\Connection']; } } ~~~ Laravel 編譯并保存所有延遲服務提供者提供的服務及服務提供者的類名。然后,只有當你嘗試解析其中某個服務時Laravel才會加載其服務提供者。
                  <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>

                              哎呀哎呀视频在线观看