<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 功能強大 支持多語言、二開方便! 廣告
                <article><h1>服務提供者</h1><ul><li><a href="#introduction">簡介</a></li><li><a href="#writing-service-providers">編寫服務提供者</a><ul><li><a href="#the-register-method">注冊方法</a></li><li><a href="#the-boot-method">引導方法</a></li></ul></li><li><a href="#registering-providers">注冊提供者</a></li><li><a href="#deferred-providers">延遲的提供者</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">簡介</a></h2><p>服務提供者是所有 Laravel 應用程序引導啟動的中心所在。包括您自己的應用程序,以及所有的 Laravel 核心服務,都是通過服務提供者引導啟動的。</p><p>但我們所謂的「引導啟動」指的是什么?一般而言,我們指的是<strong>注冊</strong>事務,包括注冊服務容器綁定,事件監聽器,中間件,甚至路由。服務提供者是配置應用程序的中心所在。</p><p>如果您打開 Laravel 的 <code class=" language-php">config<span class="token operator">/</span>app<span class="token punctuation">.</span>php</code> 文件,您會看到一個 <code class=" language-php">providers</code> 數組。這些是將被應用程序加載的服務提供者類。當然,它們其中有許多是「延遲」提供者,意味著它們不會每次請求都加載,只會按需加載。</p><p>在本概述中,您將學習如何編寫自己的服務提供商,并在您的 Laravel 應用程序中注冊它們。</p><p><a name="writing-service-providers"></a></p><h2><a href="#writing-service-providers">編寫服務提供者</a></h2><p>所有服務提供者都需要繼承 <code class=" language-php">Illuminate\<span class="token package">Support<span class="token punctuation">\</span>ServiceProvider</span></code> 類。大多數服務提供者都包含 <code class=" language-php">register</code> 和 <code class=" language-php">boot</code> 方法。在 <code class=" language-php">register</code> 方法中,您應該<strong>只能將事務綁定到 <a href="/docs/5.4/container">服務容器</a></strong>。不應該在 <code class=" language-php">register</code> 方法中嘗試注冊任何事件監聽器,路由或者任何其他功能。</p><p>Artisan 命令行可以生成一個新的提供者通過 <code class=" language-php">make<span class="token punctuation">:</span>provider</code> 命令:</p><pre class=" language-php"><code class=" language-php">php artisan make<span class="token punctuation">:</span>provider RiakServiceProvider</code></pre><p><a name="the-register-method"></a></p><h3>注冊方法</h3><p>如前所述,在 <code class=" language-php">register</code> 方法中,您只能將事務綁定到 <a href="/docs/5.4/container">服務容器</a> 。不應該在 <code class=" language-php">register</code> 方法中嘗試注冊任何事件監聽器,路由或者任何其他功能。否則,您可能會意外的使用到尚未加載的服務提供者提供的服務。</p><p>讓我們來看看一個基本的服務提供者。在服務提供者的方法中,都會提供一個有服務容器訪問權限的 <code class=" language-php"><span class="token variable">$app</span></code> 屬性:</p><p>現在,讓我們來看看基本的服務提供者。在你的任意一個服務提供者方法中,你總是可以通過訪問 <code class=" language-php"><span class="token variable">$app</span></code> 屬性使用服務容器:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Providers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Riak<span class="token punctuation">\</span>Connection</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>ServiceProvider</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">RiakServiceProvider</span> <span class="token keyword">extends</span> <span class="token class-name">ServiceProvider</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 在容器中注冊綁定 * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">register<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token this">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">app</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">singleton<span class="token punctuation">(</span></span><span class="token scope">Connection<span class="token punctuation">::</span></span><span class="token keyword">class</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$app</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Connection</span><span class="token punctuation">(</span><span class="token function">config<span class="token punctuation">(</span></span><span class="token string">'riak'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><p>服務提供者只定義了一個 <code class=" language-php">register</code> 方法,并且使用該方法在服務容器中定義了一個 <code class=" language-php">Riak\<span class="token package">Connection</span></code> 類的實現。如果您不明白服務容器的工作原理,請查看 <a href="/docs/5.4/container">服務容器</a>。</p><p><a name="the-boot-method"></a></p><h3>引導方法</h3><p>那么,如果我們需要在我們的服務提供商中注冊一個視圖合成器呢?這應該在 <code class=" language-php">boot</code> 方法中完成。<strong>此方法在所有其他服務提供者均已注冊之后調用</strong>,這意味著您可以訪問已由框架注冊的所有服務:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Providers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>ServiceProvider</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">ComposerServiceProvider</span> <span class="token keyword">extends</span> <span class="token class-name">ServiceProvider</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 引導啟動任何應用程序服務 * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">boot<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">view<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">composer<span class="token punctuation">(</span></span><span class="token string">'view'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><h4>引導方法依賴注入</h4><p>您可以為服務提供者的 <code class=" language-php">boot</code> 方法設置類型提示。<a href="/docs/5.4/container">服務容器</a> 會自動注入您需要的任何依賴:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Contracts<span class="token punctuation">\</span>Routing<span class="token punctuation">\</span>ResponseFactory</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">boot<span class="token punctuation">(</span></span>ResponseFactory <span class="token variable">$response</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$response</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">macro<span class="token punctuation">(</span></span><span class="token string">'caps'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$value</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span></code></pre><p><a name="registering-providers"></a></p><h2><a href="#registering-providers">注冊提供者</a></h2><p>所有服務提供者都在 <code class=" language-php">config<span class="token operator">/</span>app<span class="token punctuation">.</span>php</code> 配置文件中注冊。此文件包含一個服務提供者類數組 <code class=" language-php">providers</code> 。默認情況下,它只會列出 Laravel 核心服務提供者類。這些服務提供者引導啟動 Laravel 核心組件,例如郵件程序,隊列,緩存和其他。</p><p>要注冊您的提供程序,只需將其添加到數組:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'providers'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">[</span> <span class="token comment" spellcheck="true"> // Other Service Providers </span> <span class="token scope">App<span class="token punctuation">\</span>Providers<span class="token punctuation">\</span>ComposerServiceProvider<span class="token punctuation">::</span></span><span class="token keyword">class</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p><a name="deferred-providers"></a></p><h2><a href="#deferred-providers">延遲的提供者</a></h2><p>如果您的提供程序 <strong>僅</strong> 在 <a href="/docs/5.4/container">服務容器</a> 中注冊綁定,您可以選擇推遲其注冊,直到真正需要注冊綁定時。延遲加載服務提供者將提高應用程序的性能,因為它不會每次都從文件系統中加載。</p><p>Laravel 編譯并保存了一份清單,包括由延緩服務提供者所提供的所有服務,以及其服務提供者類的類名。因此,只有在當您在試圖解析其中的服務時,Laravel 才會加載該服務提供者。</p><p>若要推遲提供者的加載,請將 <code class=" language-php">defer</code> 屬性設置為 <code class=" language-php"><span class="token boolean">true</span></code> ,并定義 <code class=" language-php">provides</code> 方法。<code class=" language-php">provides</code> 應該返回由提供者注冊的服務容器綁定:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Providers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Riak<span class="token punctuation">\</span>Connection</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>ServiceProvider</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">RiakServiceProvider</span> <span class="token keyword">extends</span> <span class="token class-name">ServiceProvider</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 顯示是否延遲提供程序的加載 * * @var bool */</span> <span class="token keyword">protected</span> <span class="token variable">$defer</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">/** * 注冊一個服務提供者 * * @return void */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">register<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token this">$this</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">app</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">singleton<span class="token punctuation">(</span></span><span class="token scope">Connection<span class="token punctuation">::</span></span><span class="token keyword">class</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$app</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Connection</span><span class="token punctuation">(</span><span class="token variable">$app</span><span class="token punctuation">[</span><span class="token string">'config'</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'riak'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment" spellcheck="true">/** * 獲取提供者提供的服務 * * @return array */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">provides<span class="token punctuation">(</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token scope">Connection<span class="token punctuation">::</span></span><span class="token keyword">class</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><h2>譯者署名</h2><table><thead><tr><th>用戶名</th><th>頭像</th><th>職能</th><th>簽名</th></tr></thead><tbody><tr><td><a href="https://github.com/e421083458">@e421083458</a></td><td><img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/10802_1486368142.jpeg?imageView2/1/w/100/h/100"></td><td>翻譯</td><td>Github求star,<a href="https://github.com/e421083458/">@e421083458</a> at Github</td></tr></tbody></table></article>
                  <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>

                              哎呀哎呀视频在线观看