<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之旅 廣告
                # MVC 應用(MVC Applications) 在Phalcon,策劃MVC操作背后的全部困難工作通常都可以 通過[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)做到。這個組件封裝了全部后端所需要的復雜 操作,實例化每一個需要用到的組件并與項目整合在一起,從而使得MVC模式可以如期地運行。 ## 單模塊或多模塊應用(Single or Multi Module Applications) 通過這個組件,你可以運行各式各樣的MVC結構: ### 單模塊(Single Module) 單一的MVC應用僅僅包含了一個模塊。可以使用命名空間,但不是必需的。 這樣類型的應用可能會有以下文件目錄結構: ~~~ single/ app/ controllers/ models/ views/ public/ css/ img/ js/ ~~~ 如果未使用命名空間,以下的啟動文件可用于編排MVC工作流: ~~~ <?php use Phalcon\Loader; use Phalcon\Mvc\View; use Phalcon\Mvc\Application; use Phalcon\Di\FactoryDefault; $loader = new Loader(); $loader->registerDirs( [ "../apps/controllers/", "../apps/models/", ] ); $loader->register(); $di = new FactoryDefault(); // 注冊視圖組件 $di->set( "view", function () { $view = new View(); $view->setViewsDir("../apps/views/"); return $view; } ); $application = new Application($di); try { $response = $application->handle(); $response->send(); } catch (\Exception $e) { echo $e->getMessage(); } ~~~ 如果使用了命名空間,則可以使用以下啟動文件(譯者注:主要區別在于使用$loader的方式): ~~~ <?php use Phalcon\Loader; use Phalcon\Mvc\View; use Phalcon\Mvc\Dispatcher; use Phalcon\Mvc\Application; use Phalcon\Di\FactoryDefault; $loader = new Loader(); // 根據命名空間前綴加載 $loader->registerNamespaces( [ "Single\\Controllers" => "../apps/controllers/", "Single\\Models" => "../apps/models/", ] ); $loader->register(); $di = new FactoryDefault(); // 注冊調度器,并設置控制器的默認命名空間 $di->set( "dispatcher", function () { $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace("Single\\Controllers"); return $dispatcher; } ); // 注冊視圖組件 $di->set( "view", function () { $view = new View(); $view->setViewsDir("../apps/views/"); return $view; } ); $application = new Application($di); try { $response = $application->handle(); $response->send(); } catch (\Exception $e) { echo $e->getMessage(); } ~~~ ### 多模塊(Multi Module) 多模塊的應用使用了相同的文檔根目錄但擁有多個模塊。在這種情況下,可以使用以下的文件目錄結構: ~~~ multiple/ apps/ frontend/ controllers/ models/ views/ Module.php backend/ controllers/ models/ views/ Module.php public/ css/ img/ js/ ~~~ 在apps/下的每一個目錄都有自己的MVC結構。Module.php文件代表了各個模塊不同的配置,如自動加載器和自定義服務: ~~~ <?php namespace Multiple\Backend; use Phalcon\Loader; use Phalcon\Mvc\View; use Phalcon\DiInterface; use Phalcon\Mvc\Dispatcher; use Phalcon\Mvc\ModuleDefinitionInterface; class Module implements ModuleDefinitionInterface { /** * 注冊自定義加載器 */ public function registerAutoloaders(DiInterface $di = null) { $loader = new Loader(); $loader->registerNamespaces( [ "Multiple\\Backend\\Controllers" => "../apps/backend/controllers/", "Multiple\\Backend\\Models" => "../apps/backend/models/", ] ); $loader->register(); } /** * 注冊自定義服務 */ public function registerServices(DiInterface $di) { // Registering a dispatcher $di->set( "dispatcher", function () { $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace("Multiple\\Backend\\Controllers"); return $dispatcher; } ); // Registering the view component $di->set( "view", function () { $view = new View(); $view->setViewsDir("../apps/backend/views/"); return $view; } ); } } ~~~ 還需要一個指定的啟動文件來加載多模塊的MVC架構: ~~~ <?php use Phalcon\Mvc\Router; use Phalcon\Mvc\Application; use Phalcon\Di\FactoryDefault; $di = new FactoryDefault(); // 自定義路由 // More information how to set the router up https://docs.phalconphp.com/zh/latest/reference/routing.html $di->set( "router", function () { $router = new Router(); $router->setDefaultModule("frontend"); $router->add( "/login", [ "module" => "backend", "controller" => "login", "action" => "index", ] ); $router->add( "/admin/products/:action", [ "module" => "backend", "controller" => "products", "action" => 1, ] ); $router->add( "/products/:action", [ "controller" => "products", "action" => 1, ] ); return $router; } ); // 創建應用 $application = new Application($di); // 注冊模塊 $application->registerModules( [ "frontend" => [ "className" => "Multiple\\Frontend\\Module", "path" => "../apps/frontend/Module.php", ], "backend" => [ "className" => "Multiple\\Backend\\Module", "path" => "../apps/backend/Module.php", ] ] ); // 處理請求 $response = $application->handle(); $response->send(); } catch (\Exception $e) { echo $e->getMessage(); } ~~~ 如果你想在啟動文件保持模塊的配置,你可以使用匿名函數來注冊對應的模塊: ~~~ <?php use Phalcon\Mvc\View; // 創建視圖組件 $view = new View(); // 設置視圖組件相關選項 // ... // Register the installed modules $application->registerModules( [ "frontend" => function ($di) use ($view) { $di->setShared( "view", function () use ($view) { $view->setViewsDir("../apps/frontend/views/"); return $view; } ); }, "backend" => function ($di) use ($view) { $di->setShared( "view", function () use ($view) { $view->setViewsDir("../apps/backend/views/"); return $view; } ); } ] ); ~~~ 當[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)有多個模塊注冊時,通常 每個都是需要的,以便每一個被匹配到的路由都能返回一個有效的模塊。每個已經注冊的模塊都有一個相關的類來提供建立和啟動自身的函數。 而每個模塊定義的類都必須實現registerAutoloaders()和registerServices()這兩個方法,這兩個函數會在模塊即被執行時被[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)調用。 ## 應用事件(Application Events) [Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)可以把事件發送到[EventsManager](http://docs.iphalcon.cn/reference/events.html)(如果它激活的話)。 事件將被當作”application”類型被消費掉。目前已支持的事件如下: | 事件名稱 | 消費于 | | --- | --- | | boot | 當應用處理它首個請求時被執行 | | beforeStartModule | 在初始化模塊之前,僅當模塊被注冊時 | | afterStartModule | 在初始化模塊之后,僅當模塊被注冊時 | | beforeHandleRequest | 在執行分發環前 | | afterHandleRequest | 在執行分發環后 | 以下示例演示了如何將偵聽器綁定到組件: ~~~ <?php use Phalcon\Events\Event; use Phalcon\Events\Manager as EventsManager; $eventsManager = new EventsManager(); $application->setEventsManager($eventsManager); $eventsManager->attach( "application", function (Event $event, $application) { // ... } ); ~~~ ## 外部資源(External Resources) * [Github上的MVC示例](https://github.com/phalcon/mvc)
                  <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>

                              哎呀哎呀视频在线观看