# 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