<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 應用容器 控制反轉(IoC)容器是用于管理類依賴性的工具。依賴注入是一種刪除硬編碼類依賴的方法。相反,依賴項是在運行時注入的,因為可以輕松交換依賴項實現,因此具有更大的靈活性。 #### 將類型綁定到容器 IoC容器可以通過兩種方式來解決依賴關系:通過閉包回調或自動解析。首先,我們將探討Closure回調。首先,可以將“類型”綁定到容器中: ~~~ App::bind('foo', function($app) { return new FooBar; }); ~~~ #### 從容器解析類型 ~~~ $value = App::make('foo'); ~~~ `App::make`調用該方法時,將執行Closure回調并返回結果。 #### 將“共享”類型綁定到容器中 有時,您可能希望將某些內容綁定到容器中,而該內容只能被解析一次,并且在隨后對該容器的調用中應返回相同的實例: ~~~ App::singleton('foo', function() { return new FooBar; }); ~~~ #### 將現有實例綁定到容器 您還可以使用以下`instance`方法將現有對象實例綁定到容器中: ~~~ $foo = new Foo; App::instance('foo', $foo); ~~~ #### 將接口綁定到實現 在某些情況下,類可能取決于接口實現,而不是“具體類型”。在這種情況下,`App::bind`必須使用該方法來通知容器要注入的接口實現: ~~~ App::bind('UserRepositoryInterface', 'DbUserRepository'); ~~~ 現在考慮以下代碼: ~~~ $users = App::make('UserRepositoryInterface'); ~~~ 由于我們已將綁定`UserRepositoryInterface`到具體類型,因此`DbUserRepository`將在創建控制器時自動將注入。 ### [](https://octobercms.com/docs/services/application#where-to-register)在哪里注冊綁定 IoC綁定(如[事件處理程序](https://octobercms.com/docs/services/events))通常屬于“引導程序代碼”類別。換句話說,它們使您的應用程序準備好實際處理請求,并且通常需要在實際調用路由或控制器之前執行該應用程序。最常見的地方是[插件注冊文件](https://octobercms.com/docs/plugin/registration#registration-methods)的`boot`方法。另外,插件可以在插件目錄中提供一個名為**init.php**的文件,您可以使用該文件放置IoC注冊邏輯。[](https://octobercms.com/docs/plugin/registration#registration-methods) ### [](https://octobercms.com/docs/services/application#service-providers)服務供應商 服務提供商是在單個位置創建庫并執行與組相關的IoC注冊的好方法。在服務提供商內部,您可以注冊自定義身份驗證驅動程序,向IoC容器注冊應用程序的存儲庫類,甚至設置自定義Artisan命令。 實際上,[插件注冊文件](https://octobercms.com/docs/plugin/registration)繼承了服務提供者,并且大多數核心組件都包括服務提供者。配置文件的`providers`陣列中列出了您的應用程序的所有已注冊服務提供商`config/app.php`。 #### 定義服務提供商 要創建服務提供者,只需擴展`October\Rain\Support\ServiceProvider`類并定義一個`register`方法: ~~~ use October\Rain\Support\ServiceProvider; class FooServiceProvider extends ServiceProvider { public function register() { $this->app->bind('foo', function() { return new Foo; }); } } ~~~ 請注意,在該`register`方法中,可以通過`$this->app`屬性使用應用程序IoC容器。創建了提供程序并準備將其注冊到您的應用程序后,只需將其添加到配置文件中的`providers`陣列中即可`app`。 #### 在運行時注冊服務提供商 您還可以在運行時使用以下`App::register`方法注冊服務提供商: ~~~ App::register('FooServiceProvider'); ~~~ ### [](https://octobercms.com/docs/services/application#application-events)應用事件 #### 請求事件 您可以使用`before`和`after`方法在路由請求之前注冊特殊事件: ~~~ App::before(function ($request) { // Code to execute before the request is routed }); App::after(function ($request) { // Code to execute after the request is routed }); ~~~ #### 集裝箱事件 服務容器在每次解析對象時都會觸發一個事件。您可以使用以下`resolving`方法監聽此事件: ~~~ App::resolving(function ($object, $app) { // Called when container resolves object of any type... }); App::resolving('foo', function ($fooBar, $app) { // Called when container resolves objects using hint "foo"... }); App::resolving('Acme\Blog\Classes\FooBar', function ($fooBar, $app) { // Called when container resolves objects of type "FooBar"... }); ~~~ 如您所見,要解析的對象將傳遞給回調,使您可以在將對象提供給使用者之前設置該對象的所有其他屬性。 ### [](https://octobercms.com/docs/services/application#application-helpers)應用助手 #### 查找應用程序環境 您可以使用該`environment`方法來發現由[環境配置](https://octobercms.com/docs/setup/configuration#environment-config)確定的應用程序環境。 ~~~ // production App::environment(); ~~~ #### 確定執行上下文 使用該方法可以知道當前請求是否正在管理后端區域中執行`runningInBackend`。 ~~~ App::runningInBackend(); ~~~ 您還可以使用該`runningInConsole`方法來檢查執行代碼是否在[命令行界面內進行](https://octobercms.com/docs/console/commands): ~~~ App::runningInConsole(); ~~~
                  <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>

                              哎呀哎呀视频在线观看