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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 教程 2:INVO簡介(Tutorial 2: Introducing INVO) 在第二部分,我們將會說明一個完整的應用用來加深Phalcon的開發。 INVO是我們創建的一個程序樣本。INVO是一個簡單的用來允許用戶生成發票的網站,并且可以做其他的任務,比如管理他們的客戶或者產品。你可以從[Github](https://github.com/phalcon/invo)中復制它的代碼。 同樣,INVO使用[Bootstrap](http://getbootstrap.com/)做的前端框架。雖然這個應用不能生成發票,但是它仍然可以作為一個例子來理解框架是如何工作的。 ## 項目結構(Project Structure) 一旦你從你的文檔根目錄復制了這個項目,你將會看到以下結構: ~~~ invo/ app/ config/ controllers/ forms/ library/ logs/ models/ plugins/ views/ cache/ volt/ docs/ public/ css/ fonts/ js/ schemas/ ~~~ 正如你所知道的,Phalcon不會強求應用程序使用特定的文件結構。 這個項目提供了一個簡單的MVC模型和公共文檔根目錄。 一旦你打開瀏覽器輸入[http://localhost/invo](http://localhost/invo)瀏覽應用程序你將會看到下面這樣: ![../_images/invo-1.png](http://docs.iphalcon.cn/_images/invo-1.png) 這個應用分為兩部分,一部分是前端,這個是一個公開的部分,瀏覽者可以接收關于INVO的信息,也可以請求聯系人信息。第二部分是后端,一個管理員區域,一個注冊用戶可以管理他/她的產品和客戶。 ## 路由(Routing) INVO使用內置的標準路由.[Router](http://docs.iphalcon.cn/reference/routing.html)組件. 路由符合以下格式:/:controller/:action/:params. 這就意味著第一部分URI是控制器,第二部分是方法,剩余的是參數。 下面的路由/session/register執行的是 SessionController 控制器和它的 registerAction方法。 ## 配置(Configuration) INVO有一個設置應用常規參數的配置文件。這個文件位于 app/config/config.ini,并且他在應用引導文件的最開始就開始加載 (public/index.php): ~~~ <?php use Phalcon\Config\Adapter\Ini as ConfigIni; // ... // 讀取配置 $config = new ConfigIni( APP_PATH . "app/config/config.ini" ); ~~~ [Phalcon\\Config](http://docs.iphalcon.cn/reference/config.html)允許我們使用面向對象的方式來操作文件。在這個例子中,我們使用ini文件作為配置文件,然而,它對于配置文件有更多的適配支持。這個配置文件包含以下配置: ~~~ [database] host = localhost username = root password = secret name = invo [application] controllersDir = app/controllers/ modelsDir = app/models/ viewsDir = app/views/ pluginsDir = app/plugins/ formsDir = app/forms/ libraryDir = app/library/ baseUri = /invo/ ~~~ Phalcon沒有任何提前預約好的慣例配置。節幫助我們組織相應選項. 在這個文件里面有兩個部分被用于后面的”application” 和 “database”. ## 自動加載(Autoloaders) 在啟動文件(public/index.php)的第二部分是自動加載器: ~~~ <?php /** * 自動加載配置 */ require APP_PATH . "app/config/loader.php"; ~~~ The autoloader registers a set of directories in which the application will look for the classes that it eventually will need. ~~~ <?php $loader = new Phalcon\Loader(); // We're a registering a set of directories taken from the configuration file $loader->registerDirs( [ APP_PATH . $config->application->controllersDir, APP_PATH . $config->application->pluginsDir, APP_PATH . $config->application->libraryDir, APP_PATH . $config->application->modelsDir, APP_PATH . $config->application->formsDir, ] ); $loader->register(); ~~~ 注意, 以上代碼注冊的目錄是在配置文件中定義的. 唯一沒有注冊的目錄是viewsDir, 因為它包含 HTML + PHP 文件但不是類. 同時, 也要注意我們使用了常量 APP\_PATH, 這個常量在引導文件(public/index.php)中被定義, 允許我們對我們項目的根路徑有一個參考: ~~~ <?php // ... define( "APP_PATH", realpath("..") . "/" ); ~~~ ## 注冊服務(Registering services) 在引導文件中加載的另外一個文件是 (app/config/services.php). 這個文件允許我們組織 INVO 不需要的文件. ~~~ <?php /** * 加載應用服務 */ require APP_PATH . "app/config/services.php"; ~~~ 服務注冊已經在前面的教程中實現了, 利用一個閉包來實現惰性加載組件: ~~~ <?php use Phalcon\Mvc\Url as UrlProvider; // ... /** * URL組件被用來生成應用中的各種URL */ $di->set( "url", function () use ($config) { $url = new UrlProvider(); $url->setBaseUri( $config->application->baseUri ); return $url; } ); ~~~ 稍后我們將會深入討論這個文件. ## 處理請求(Handling the Request) 如果我們忽略文件(public/index.php)的結束, 請求最終會被[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)處理, 初始化并運行所有必須的代碼來讓程序執行: ~~~ <?php use Phalcon\Mvc\Application; // ... $application = new Application($di); $response = $application->handle(); $response->send(); ~~~ ## 依賴注入(Dependency Injection) 看上面代碼的第一行, Application 類的構造方法接受一個`$di`變量作為一個參數. 這個變量的用意是什么呢? Phalcon 是一個高度解耦的框架, 所以我們一個組件來充當膠水來讓每個組件都能正常工作. 這個組件就是[Phalcon\\Di](http://docs.iphalcon.cn/api/Phalcon_Di.html). 這是一個服務容器, 可以執行依賴注入和服務定位, 實例化應用所需要的所有組件. 在容器中有多種注冊服務的方法. 在INVO里, 大部分服務使用匿名函數或者閉包來進行注冊的. 多虧了這個, 對象以惰性的方式被實例化, 減少了應用程序所需要的資源. 例如, 下面摘錄了 Session 服務的注冊. 當應用程序需要訪問Session數據的時候, 匿名函數才會被調用: ~~~ <?php use Phalcon\Session\Adapter\Files as Session; // ... // 在一個組件請求Session服務的時候, 啟動Sesssion $di->set( "session", function () { $session = new Session(); $session->start(); return $session; } ); ~~~ 這里, 我們可以自動的更改適配器, 執行額外的初始化或者更多. 注意, 這個服務器是使用 “session” 名字進行注冊的. 這是一個慣例, 來允許框架在服務容器中識別正在活動的服務. 一個請求可以使用多個服務和單獨注冊每個服務可以說是一個繁重的任務. 因此, 框架提供了[Phalcon\\Di](http://docs.iphalcon.cn/api/Phalcon_Di.html)的一個變種, 稱作[Phalcon\\Di\\FactoryDefault](http://docs.iphalcon.cn/api/Phalcon_Di_FactoryDefault.html)其任務是注冊所有的服務來提供一個全棧框架. ~~~ <?php use Phalcon\Di\FactoryDefault; // ... // FactoryDefault 依賴注入自動注冊了正確的服務來提供了一個全棧框架 $di = new FactoryDefault(); ~~~ 它通過框架注冊大部分組件服務作為標準提供. 如果我們需要重寫某些已經定義的服務, 我們僅僅需要重新定義它, 就像上面的 “session” 和 “url”一樣. 這就是變量`$di`存在的原因. 在下一章, 我們將會看到如何在INVO中實施認證和授權.
                  <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>

                              哎呀哎呀视频在线观看