# MVC 應用(MVC Applications)
# MVC 應用(MVC Applications)
在Phalcon,策劃MVC操作背后的全部困難工作通常都可以通過 [*Phalcon\\Mvc\\Application*](#) 做到。這個組件封裝了全部后端所需要的復雜操作,實例化每一個需要用到的組件并與項目整合在一起,從而使得MVC模式可以如期地運行。
### 單模塊或多模塊應用(Single or Multi Module Applications)
通過這個組件,你可以運行各式各樣的MVC結構:
### 單模塊(Single Module)
單一的MVC應用僅僅包含了一個模塊。可以使用命名空間,但不是必需的。這樣類型的應用可能會有以下文件目錄結構:
```
<pre class="calibre14">```
single/
app/
controllers/
models/
views/
public/
css/
img/
js/
```
```
如果未使用命名空間,以下的啟動文件可用于編排MVC工作流:
```
<pre class="calibre14">```
<?php
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
$loader = new Loader();
$loader->registerDirs(
array(
'../apps/controllers/',
'../apps/models/'
)
)->register();
$di = new FactoryDefault();
// 注冊視圖組件
$di->set('view', function () {
$view = new View();
$view->setViewsDir('../apps/views/');
return $view;
});
try {
$application = new Application($di);
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo $e->getMessage();
}
```
```
如果使用了命名空間,則可以使用以下啟動文件(譯者注:主要區別在于使用$loader的方式):
```
<pre class="calibre14">```
<?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(
array(
'Single\Controllers' => '../apps/controllers/',
'Single\Models' => '../apps/models/',
)
)->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;
});
try {
$application = new Application($di);
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo $e->getMessage();
}
```
```
### 多模塊(Multi Module)
多模塊的應用使用了相同的文檔根目錄但擁有多個模塊。在這種情況下,可以使用以下的文件目錄結構:
```
<pre class="calibre14">```
multiple/
apps/
frontend/
controllers/
models/
views/
Module.php
backend/
controllers/
models/
views/
Module.php
public/
css/
img/
js/
```
```
在apps/下的每一個目錄都有自己的MVC結構。Module.php文件代表了各個模塊不同的配置,如自動加載器和自定義服務:
```
<pre class="calibre14">```
<?php
namespace Multiple\Backend;
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\ModuleDefinitionInterface;
class Module implements ModuleDefinitionInterface
{
/**
* 注冊自定義加載器
*/
public function registerAutoloaders()
{
$loader = new Loader();
$loader->registerNamespaces(
array(
'Multiple\Backend\Controllers' => '../apps/backend/controllers/',
'Multiple\Backend\Models' => '../apps/backend/models/',
)
);
$loader->register();
}
/**
* 注冊自定義服務
*/
public function registerServices($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架構:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Router;
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
$di = new FactoryDefault();
// 自定義路由
$di->set('router', function () {
$router = new Router();
$router->setDefaultModule("frontend");
$router->add("/login", array(
'module' => 'backend',
'controller' => 'login',
'action' => 'index',
));
$router->add("/admin/products/:action", array(
'module' => 'backend',
'controller' => 'products',
'action' => 1,
));
$router->add("/products/:action", array(
'controller' => 'products',
'action' => 1,
));
return $router;
});
try {
// 創建應用
$application = new Application($di);
// 注冊模塊
$application->registerModules(
array(
'frontend' => array(
'className' => 'Multiple\Frontend\Module',
'path' => '../apps/frontend/Module.php',
),
'backend' => array(
'className' => 'Multiple\Backend\Module',
'path' => '../apps/backend/Module.php',
)
)
);
// 處理請求
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo $e->getMessage();
}
```
```
如果你想在啟動文件保持模塊的配置,你可以使用匿名函數來注冊對應的模塊:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\View;
// 創建視圖組件
$view = new View();
// 設置視圖組件相關選項
// ...
// Register the installed modules
$application->registerModules(
array(
'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*](#) 有多個模塊注冊時,通常每個都是需要的,以便每一個被匹配到的路由都能返回一個有效的模塊。每個已經注冊的模塊都有一個相關的類來提供建立和啟動自身的函數。而每個模塊定義的類都必須實現registerAutoloaders()和registerServices()這兩個方法,這兩個函數會在模塊即被執行時被
> [*Phalcon\\Mvc\\Application*](#) 調用。
### 理解默認行為(Understanding the default behavior)
如果你已經看過了 [*tutorial*](#) 或者已經通過 [*Phalcon Devtools*](#) 生成了代碼,你將很容易識別以下的啟動文件:
```
<pre class="calibre14">```
<?php
try {
// 注冊自動加載器
// ...
// 注冊服務
// ...
// 處理請求
$application = new \Phalcon\Mvc\Application($di);
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo "Exception: ", $e->getMessage();
}
```
```
控制器中全部核心的工作都會在handle()被回調時觸發執行。
```
<pre class="calibre14">```
<?php
echo $application->handle()->getContent();
```
```
### 手動啟動(Manual bootstrapping)
如果你不想使用 [*Phalcon\\Mvc\\Application*](#) ,以上的代碼可以改成這樣:
```
<pre class="calibre14">```
<?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());
// 發送頭信息
$response->sendHeaders();
// 輸出響應內容
echo $response->getContent();
```
```
以下代碼替換了 [*Phalcon\\Mvc\\Application*](#) ,雖然缺少了視圖組件,但卻更適合Rest風格的API接口:
```
<pre class="calibre14">```
<?php
// 獲取 '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 Phalcon\Http\ResponseInterface) {
// 發送響應
$response->send();
}
```
```
另外一個修改就是在分發器中對拋出異常的捕捉可以將請求轉發到其他的操作:
```
<pre class="calibre14">```
<?php
// 獲取 '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 Phalcon\Http\ResponseInterface) {
// 發送響應
$response->send();
}
```
```
盡管上面的代碼比使用 [*Phalcon\\Mvc\\Application*](#) 而需要的代碼遠遠要累贅得很,但它為啟動你的應用提供了一個可修改、可定制化的途徑。因為根據你的項目需要,你可以想對實例什么和不實例化什么進行完全的控制,或者想用你自己的組件來替代那些確定和必須的組件從而擴展默認的功能。
### 應用事件(Application Events)
[*Phalcon\\Mvc\\Application*](#) 可以把事件發送到 [*EventsManager*](#) (如果它激活的話)。事件將被當作”application”類型被消費掉。目前已支持的事件如下:
事件名稱消費于boot當應用處理它首個請求時被執行beforeStartModule在初始化模塊之前,僅當模塊被注冊時afterStartModule在初始化模塊之后,僅當模塊被注冊時beforeHandleRequest在執行分發環前afterHandleRequest在執行分發環后以下示例演示了如何將偵聽器綁定到組件:
```
<pre class="calibre14">```
<?php
use Phalcon\Events\Manager as EventsManager;
$eventsManager = new EventsManager();
$application->setEventsManager($eventsManager);
$eventsManager->attach(
"application",
function ($event, $application) {
// ...
}
);
```
```
### 外部資源(External Resources)
- [Github上的MVC示例](https://github.com/phalcon/mvc)
|
- [索引](# "總目錄")
- [下一頁](# "路由(Routing)") |
- [上一頁](# "Volt 模版引擎(Volt: Template Engine)") |
- API參考
- API列表
- Abstract class Phalcon\Acl
- Abstract class Phalcon\Acl\Adapter
- Class Phalcon\Acl\Adapter\Memory
- Interface Phalcon\Acl\AdapterInterface
- Class Phalcon\Acl\Exception
- Class Phalcon\Acl\Resource
- Interface Phalcon\Acl\ResourceInterface
- Class Phalcon\Acl\Role
- Interface Phalcon\Acl\RoleInterface
- Class Phalcon\Annotations\Annotation
- Abstract class Phalcon\Annotations\Adapter
- Interface Phalcon\Annotations\AdapterInterface
- Class Phalcon\Annotations\Collection
- Class Phalcon\Annotations\Exception
- Class Phalcon\Annotations\Reader
- Interface Phalcon\Annotations\ReaderInterface
- Class Phalcon\Annotations\Reflection
- Class Phalcon\Assets\Collection
- Class Phalcon\Assets\Exception
- Interface Phalcon\Assets\FilterInterface
- Class Phalcon\Assets\Filters\Cssmin
- Class Phalcon\Assets\Filters\Jsmin
- Class Phalcon\Assets\Filters\None
- Class Phalcon\Assets\Inline
- Class Phalcon\Assets\Inline\Css
- Class Phalcon\Assets\Inline\Js
- Class Phalcon\Assets\Manager
- Class Phalcon\Assets\Resource
- Class Phalcon\Assets\Resource\Css
- Class Phalcon\Assets\Resource\Js
- Abstract class Phalcon\Cache\Backend
- Class Phalcon\Cache\Backend\Apc
- Class Phalcon\Cache\Backend\File
- Class Phalcon\Cache\Backend\Libmemcached
- Class Phalcon\Cache\Backend\Memcache
- Class Phalcon\Cache\Backend\Memory
- Class Phalcon\Cache\Backend\Mongo
- Class Phalcon\Cache\Backend\Redis
- Class Phalcon\Cache\Backend\Xcache
- Interface Phalcon\Cache\BackendInterface
- Class Phalcon\Cache\Exception
- Class Phalcon\Cache\Frontend\Base64
- Class Phalcon\Cache\Frontend\Data
- Class Phalcon\Cache\Frontend\Igbinary
- Class Phalcon\Cache\Frontend\Json
- Class Phalcon\Cache\Frontend\None
- Class Phalcon\Cache\Frontend\Output
- Interface Phalcon\Cache\FrontendInterface
- Class Phalcon\Cache\Multiple
- Class Phalcon\Cli\Router\Route
- Class Phalcon\Config
- Class Phalcon\Config\Adapter\Ini
- Class Phalcon\Config\Adapter\Json
- Class Phalcon\Config\Adapter\Php
- Class Phalcon\Config\Adapter\Yaml
- Class Phalcon\Config\Exception
- Class Phalcon\Crypt
- Class Phalcon\Crypt\Exception
- Interface Phalcon\CryptInterface
- Abstract class Phalcon\Db
- Abstract class Phalcon\Db\Adapter
- Interface Phalcon\Db\AdapterInterface
- Class Phalcon\Db\Column
- Interface Phalcon\Db\ColumnInterface
- Abstract class Phalcon\Db\Dialect
- Interface Phalcon\Db\DialectInterface
- Class Phalcon\Db\Exception
- Class Phalcon\Db\Index
- Interface Phalcon\Db\IndexInterface
- Class Phalcon\Db\Profiler
- Class Phalcon\Db\RawValue
- Class Phalcon\Db\Reference
- Interface Phalcon\Db\ReferenceInterface
- Class Phalcon\Db\Result\Pdo
- Interface Phalcon\Db\ResultInterface
- Class Phalcon\Debug
- Class Phalcon\Debug\Dump
- Class Phalcon\Debug\Exception
- Interface Phalcon\DiInterface
- Abstract class Phalcon\Dispatcher
- Interface Phalcon\DispatcherInterface
- Class Phalcon\Escaper
- Class Phalcon\Escaper\Exception
- Interface Phalcon\EscaperInterface
- Class Phalcon\Events\Event
- Interface Phalcon\Events\EventsAwareInterface
- Class Phalcon\Events\Exception
- Class Phalcon\Events\Manager
- Interface Phalcon\Events\ManagerInterface
- Class Phalcon\Exception
- Class Phalcon\Filter
- Class Phalcon\Filter\Exception
- Interface Phalcon\Filter\UserFilterInterface
- Interface Phalcon\FilterInterface
- Abstract class Phalcon\Flash
- Class Phalcon\Flash\Direct
- Class Phalcon\Flash\Exception
- Class Phalcon\Flash\Session
- Interface Phalcon\FlashInterface
- Class Phalcon\Forms\Form
- Abstract class Phalcon\Forms\Element
- Class Phalcon\Forms\Exception
- Class Phalcon\Forms\Manager
- Class Phalcon\Http\Cookie
- Class Phalcon\Http\Cookie\Exception
- Class Phalcon\Http\Request
- Class Phalcon\Http\Request\Exception
- Class Phalcon\Http\Request\File
- Interface Phalcon\Http\Request\FileInterface
- Interface Phalcon\Http\RequestInterface
- Class Phalcon\Http\Response
- Class Phalcon\Http\Response\Cookies
- Interface Phalcon\Http\Response\CookiesInterface
- Class Phalcon\Http\Response\Exception
- Class Phalcon\Http\Response\Headers
- Interface Phalcon\Http\Response\HeadersInterface
- Interface Phalcon\Http\ResponseInterface
- Class Phalcon\Image
- Abstract class Phalcon\Image\Adapter
- Class Phalcon\Image\Adapter\Imagick
- Interface Phalcon\Image\AdapterInterface
- Class Phalcon\Image\Exception
- Class Phalcon\Kernel
- Class Phalcon\Loader
- Class Phalcon\Loader\Exception
- Abstract class Phalcon\Logger
- Abstract class Phalcon\Logger\Adapter
- Class Phalcon\Logger\Adapter\File
- Class Phalcon\Logger\Adapter\Firephp
- Class Phalcon\Logger\Adapter\Stream
- Class Phalcon\Logger\Adapter\Syslog
- Interface Phalcon\Logger\AdapterInterface
- Class Phalcon\Logger\Exception
- Abstract class Phalcon\Logger\Formatter
- Interface Phalcon\Logger\FormatterInterface
- Class Phalcon\Logger\Item
- Class Phalcon\Logger\Multiple
- Class Phalcon\Mvc\Application
- Class Phalcon\Mvc\Application\Exception
- Abstract class Phalcon\Mvc\Collection
- Abstract class Phalcon\Mvc\Collection\Behavior
- Class Phalcon\Mvc\Collection\Behavior\SoftDelete
- Class Phalcon\Mvc\Collection\Behavior\Timestampable
- Interface Phalcon\Mvc\Collection\BehaviorInterface
- Class Phalcon\Mvc\Collection\Document
- Class Phalcon\Mvc\Collection\Exception
- Class Phalcon\Mvc\Collection\Manager
- Interface Phalcon\Mvc\Collection\ManagerInterface
- Interface Phalcon\Mvc\CollectionInterface
- Abstract class Phalcon\Mvc\Controller
- Interface Phalcon\Mvc\ControllerInterface
- Class Phalcon\Mvc\Dispatcher
- Class Phalcon\Mvc\Dispatcher\Exception
- Interface Phalcon\Mvc\DispatcherInterface
- Interface Phalcon\Mvc\EntityInterface
- Class Phalcon\Mvc\Micro
- Class Phalcon\Mvc\Micro\Collection
- Interface Phalcon\Mvc\Micro\CollectionInterface
- Class Phalcon\Mvc\Micro\Exception
- Class Phalcon\Mvc\Micro\LazyLoader
- Interface Phalcon\Mvc\Micro\MiddlewareInterface
- Abstract class Phalcon\Mvc\Model
- Abstract class Phalcon\Mvc\Model\Behavior
- Class Phalcon\Mvc\Model\Criteria
- Interface Phalcon\Mvc\Model\CriteriaInterface
- Class Phalcon\Mvc\Model\Exception
- Class Phalcon\Mvc\Model\Manager
- Interface Phalcon\Mvc\Model\ManagerInterface
- Class Phalcon\Mvc\Model\Message
- Interface Phalcon\Mvc\Model\MessageInterface
- Abstract class Phalcon\Mvc\Model\MetaData
- Interface Phalcon\Mvc\Model\MetaDataInterface
- Class Phalcon\Mvc\Model\Query
- Interface Phalcon\Mvc\Model\QueryInterface
- Class Phalcon\Mvc\Model\Relation
- Interface Phalcon\Mvc\Model\RelationInterface
- Interface Phalcon\Mvc\Model\ResultInterface
- Abstract class Phalcon\Mvc\Model\Resultset
- Abstract class Phalcon\Mvc\Model\Validator
- Interface Phalcon\Mvc\Model\ResultsetInterface
- Class Phalcon\Mvc\Model\Row
- Class Phalcon\Mvc\Model\Transaction
- Interface Phalcon\Mvc\Model\TransactionInterface
- Class Phalcon\Mvc\Model\ValidationFailed
- Interface Phalcon\Mvc\ModelInterface
- Interface Phalcon\Mvc\ModuleDefinitionInterface
- Class Phalcon\Mvc\Router
- Class Phalcon\Mvc\Router\Annotations
- Class Phalcon\Mvc\Router\Exception
- Class Phalcon\Mvc\Router\Group
- Interface Phalcon\Mvc\Router\GroupInterface
- Class Phalcon\Mvc\Router\Route
- Interface Phalcon\Mvc\Router\RouteInterface
- Interface Phalcon\Mvc\RouterInterface
- Class Phalcon\Mvc\Url
- Class Phalcon\Mvc\Url\Exception
- Interface Phalcon\Mvc\UrlInterface
- Class Phalcon\Mvc\User\Component
- Class Phalcon\Mvc\User\Module
- Class Phalcon\Mvc\User\Plugin
- Class Phalcon\Mvc\View
- Abstract class Phalcon\Mvc\View\Engine
- Interface Phalcon\Mvc\View\EngineInterface
- Class Phalcon\Mvc\View\Exception
- Class Phalcon\Mvc\View\Simple
- Interface Phalcon\Mvc\ViewBaseInterface
- Interface Phalcon\Mvc\ViewInterface
- Abstract class Phalcon\Paginator\Adapter
- Class Phalcon\Paginator\Adapter\Model
- Class Phalcon\Paginator\Adapter\NativeArray
- Class Phalcon\Paginator\Adapter\QueryBuilder
- Interface Phalcon\Paginator\AdapterInterface
- Class Phalcon\Paginator\Exception
- Class Phalcon\Queue\Beanstalk
- Class Phalcon\Queue\Beanstalk\Job
- Final class Phalcon\Registry
- Class Phalcon\Security
- Class Phalcon\Security\Exception
- Abstract class Phalcon\Session
- Abstract class Phalcon\Session\Adapter
- Interface Phalcon\Session\AdapterInterface
- Class Phalcon\Session\Bag
- Interface Phalcon\Session\BagInterface
- Class Phalcon\Session\Exception
- Class Phalcon\Tag
- Class Phalcon\Tag\Exception
- Abstract class Phalcon\Tag\Select
- Abstract class Phalcon\Text
- Abstract class Phalcon\Translate
- Abstract class Phalcon\Translate\Adapter
- Class Phalcon\Translate\Adapter\Csv
- Class Phalcon\Translate\Adapter\Gettext
- Class Phalcon\Translate\Adapter\NativeArray
- Interface Phalcon\Translate\AdapterInterface
- Class Phalcon\Translate\Exception
- Class Phalcon\Validation
- Class Phalcon\Validation\Exception
- Class Phalcon\Validation\Message
- Class Phalcon\Validation\Message\Group
- Interface Phalcon\Validation\MessageInterface
- Abstract class Phalcon\Validation\Validator
- Class Phalcon\Validation\Validator\Alnum
- Class Phalcon\Validation\Validator\Alpha
- Class Phalcon\Validation\Validator\Between
- Class Phalcon\Validation\Validator\Confirmation
- Class Phalcon\Validation\Validator\Digit
- Class Phalcon\Validation\Validator\Email
- Class Phalcon\Validation\Validator\ExclusionIn
- Class Phalcon\Validation\Validator\File
- Class Phalcon\Validation\Validator\Identical
- Class Phalcon\Validation\Validator\InclusionIn
- Class Phalcon\Validation\Validator\Numericality
- Class Phalcon\Validation\Validator\PresenceOf
- Class Phalcon\Validation\Validator\Regex
- Class Phalcon\Validation\Validator\StringLength
- Class Phalcon\Validation\Validator\Uniqueness
- Class Phalcon\Validation\Validator\Url
- Interface Phalcon\Validation\ValidatorInterface
- Class Phalcon\Version
- 參考手冊
- 安裝(Installation)
- 教程 1:讓我們通過例子來學習(Tutorial 1: Let’s learn by example)
- 教程 2:Introducing INVO(Tutorial 2: Introducing INVO)
- 教程 3: Securing INVO
- 教程 4: Using CRUDs
- 教程 5: Customizing INVO
- 教程 6: Vkuró
- 教程 7:創建簡單的 REST API(Tutorial 7: Creating a Simple REST API)
- 示例列表(List of examples)
- 依賴注入與服務定位器(Dependency Injection/Service Location)
- MVC 架構(The MVC Architecture)
- 使用控制器(Using Controllers)
- 使用模型(Working with Models)
- 模型元數據(Models Meta-Data)
- 事務管理(Model Transactions)
- Phalcon 查詢語言(Phalcon Query Language (PHQL))
- 緩存對象關系映射(Caching in the ORM)
- 對象文檔映射 ODM (Object-Document Mapper)
- 使用視圖(Using Views)
- 視圖助手(View Helpers)
- 資源文件管理(Assets Management)
- Volt 模版引擎(Volt: Template Engine)
- MVC 應用(MVC Applications)
- 路由(Routing)
- 調度控制器(Dispatching Controllers)
- 微應用(Micro Applications)
- 使用命名空間(Working with Namespaces)
- 事件管理器(Events Manager)
- Request Environment
- 返回響應(Returning Responses)
- Cookie 管理(Cookies Management)
- 生成 URL 和 路徑(Generating URLs and Paths)
- 閃存消息(Flashing Messages)
- 使用 Session 存儲數據(Storing data in Session)
- 過濾與清理(Filtering and Sanitizing)
- 上下文編碼(Contextual Escaping)
- 驗證(Validation)
- 表單(Forms)
- 讀取配置(Reading Configurations)
- 分頁(Pagination)
- 使用緩存提高性能(Improving Performance with Cache)
- 安全(Security)
- Encryption/Decryption
- 訪問控制列表 ACL(Access Control Lists ACL)
- 多語言支持(Multi-lingual Support)
- Universal Class Loader
- 日志記錄(Logging)
- 注釋解析器(Annotations Parser)
- 命令行應用(Command Line Applications)
- 隊列(Queueing)
- 數據庫抽象層(Database Abstraction Layer)
- 國際化(Internationalization)
- 數據庫遷移(Database Migrations)
- 調試應用程序(Debugging Applications)
- Phalcon 開發工具(Phalcon Developer Tools)
- 提高性能:下一步該做什么?(Increasing Performance: What’s next?)
- 單元測試(Unit testing)
- 授權(License)