# Understanding How Phalcon Applications Work
如果你已經看過了[tutorial](http://docs.iphalcon.cn/reference/tutorial.html)或者已經通過[Phalcon Devtools](http://docs.iphalcon.cn/reference/tools.html)生成了代碼, 你將很容易識別以下的啟動文件:
~~~
<?php
use Phalcon\Mvc\Application;
// 注冊自動加載器
// ...
// 注冊服務
// ...
// 處理請求
$application = new Application($di);
try {
$response = $application->handle();
$response->send();
} catch (\Exception $e) {
echo "Exception: ", $e->getMessage();
}
~~~
控制器中全部核心的工作都會在handle()被回調時觸發執行。
~~~
<?php
$response = $application->handle();
~~~
## 手動啟動(Manual bootstrapping)
如果你不想使用[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html),以上的代碼可以改成這樣:
~~~
<?php
// 獲取 'router' 服務
$router = $di["router"];
$router->handle();
$view = $di["view"];
$dispatcher = $di["dispatcher"];
// 傳遞路由的相關數據傳遞給調度器
$dispatcher->setControllerName(
$router->getControllerName()
);
$dispatcher->setActionName(
$router->getActionName()
);
$dispatcher->setParams(
$router->getParams()
);
// 啟動視圖
$view->start();
// 請求調度
$dispatcher->dispatch();
// 渲染相關視圖
$view->render(
$dispatcher->getControllerName(),
$dispatcher->getActionName(),
$dispatcher->getParams()
);
// 完成視圖
$view->finish();
$response = $di["response"];
// 傳遞視圖內容給響應對象
$response->setContent(
$view->getContent()
);
// Send the response
$response->send();
~~~
以下代碼替換了[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html),雖然缺少了視圖組件, 但卻更適合Rest風格的API接口:
~~~
<?php
use Phalcon\Http\ResponseInterface;
// 獲取 'router' 服務
$router = $di["router"];
$router->handle();
$dispatcher = $di["dispatcher"];
// 傳遞路由的相關數據傳遞給調度器
$dispatcher->setControllerName(
$router->getControllerName()
);
$dispatcher->setActionName(
$router->getActionName()
);
$dispatcher->setParams(
$router->getParams()
);
// 請求調度
$dispatcher->dispatch();
// 獲取最后的返回結果
$response = $dispatcher->getReturnedValue();
// 判斷結果是否是 'response' 對象
if ($response instanceof ResponseInterface) {
// 發送響應
$response->send();
}
~~~
另外一個修改就是在分發器中對拋出異常的捕捉可以將請求轉發到其他的操作:
~~~
<?php
use Phalcon\Http\ResponseInterface;
// 獲取 'router' 服務
$router = $di["router"];
$router->handle();
$dispatcher = $di["dispatcher"];
// 傳遞路由的相關數據傳遞給調度器
$dispatcher->setControllerName(
$router->getControllerName()
);
$dispatcher->setActionName(
$router->getActionName()
);
$dispatcher->setParams(
$router->getParams()
);
try {
// 請求調度
$dispatcher->dispatch();
} catch (Exception $e) {
// An exception has occurred, dispatch some controller/action aimed for that
// Pass the processed router parameters to the dispatcher
$dispatcher->setControllerName("errors");
$dispatcher->setActionName("action503");
// Dispatch the request
$dispatcher->dispatch();
}
// 獲取最后的返回結果
$response = $dispatcher->getReturnedValue();
// 判斷結果是否是 'response' 對象
if ($response instanceof ResponseInterface) {
// 發送響應
$response->send();
}
~~~
盡管上面的代碼比使用[Phalcon\\Mvc\\Application](http://docs.iphalcon.cn/api/Phalcon_Mvc_Application.html)而需要的代碼遠遠要累贅得很, 但它為啟動你的應用提供了一個可修改、可定制化的途徑。 因為根據你的項目需要,你可以想對實例什么和不實例化什么進行完全的控制,或者想用你自己的組件來替代那些確定和必須的組件從而擴展默認的功能。
- 簡介
- 安裝
- 安裝(installlation)
- XAMPP下的安裝
- WAMP下安裝
- Nginx安裝說明
- Apache安裝說明
- Cherokee 安裝說明
- 使用 PHP 內置 web 服務器
- Phalcon 開發工具
- Linux 系統下使用 Phalcon 開發工具
- Mac OS X 系統下使用 Phalcon 開發工具
- Windows 系統下使用 Phalcon 開發工具
- 教程
- 教程 1:讓我們通過例子來學習
- 教程 2:INVO簡介
- 教程 3: 保護INVO
- 教程4: 使用CRUD
- 教程5: 定制INVO
- 教程 6: V?kuró
- 教程 7:創建簡單的 REST API
- 組件
- 依賴注入與服務定位器
- MVC架構
- 使用控制器
- 使用模型
- 模型關系
- 事件與事件管理器
- Behaviors
- 模型元數據
- 事務管理
- 驗證數據完整性
- Workingwith Models
- Phalcon查詢語言
- 緩存對象關系映射
- 對象文檔映射 ODM
- 使用視圖
- 視圖助手
- 資源文件管理
- Volt 模版引擎
- MVC 應用
- 路由
- 調度控制器
- Micro Applications
- 使用命名空間
- 事件管理器
- Request Environmen
- 返回響應
- Cookie 管理
- 生成 URL 和 路徑
- 閃存消息
- 使用 Session 存儲數據
- 過濾與清理
- 上下文編碼
- 驗證Validation
- 表單_Forms
- 讀取配置
- 分頁 Pagination
- 使用緩存提高性能
- 安全
- 加密與解密 Encryption/Decryption
- 訪問控制列表
- 多語言支持
- 類加載器 Class Autoloader
- 日志記錄_Logging
- 注釋解析器 Annotations Parser
- 命令行應用 Command Line Applications
- Images
- 隊列 Queueing
- 數據庫抽象層
- 國際化
- 數據庫遷移
- 調試應用程序
- 單元測試
- 進階技巧與延伸閱讀
- 提高性能:下一步該做什么?
- Dependency Injection Explained
- Understanding How Phalcon Applications Work
- Api
- Abstract class Phalcon\Acl