# 使用控制器(Using Controllers)
# 使用控制器(Using Controllers)
控制器提供了一堆可以被調用的方法,即:action。action是控制器中用于處理請求的方法。默認情況下,全部控制器public的方法都會映射到action并且可以通過URL訪問。action負責解釋請求和創建響應。通常,響應是以渲染的視圖格式被創建,但也存在其他的方式來創建(譯者注:如AJAX請求返回JSON格式的數據)。
例如,當你訪問一個類似這樣的URL時:<http://localhost/blog/posts/show/2015/the-post-title>,Phalcon默認會這樣分解各個部分:
這時,PostsController將會處理這個請求。在一個項目中,沒有強制指定放置控制器的地方,這些控制器都可以通過使用 [*autoloaders*](#) 來加載,所以你可以根據需要自由組件你的控制器。
控制器類必須以“Controller”為后綴,action則須以“Action”為后綴。一個控制器類的例子如下:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function showAction($year, $postTitle)
{
}
}
```
```
額外的URI參數定義為action的參數,以致這些參數可以簡單地通過本地變量來獲取。控制器可以選擇繼承 [*Phalcon\\Mvc\\Controller*](#) 。如果繼承此基類,你的控制器類則能輕松訪問應用的各種服務。
沒有默認缺省值的參數視為必須參數處理。可以像PHP那樣為參數設定一個默認值:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function showAction($year = 2015, $postTitle = 'some default title')
{
}
}
```
```
參數將會按路由傳遞和函數定義一樣的順序來賦值。你可以使用以下根據參數名稱的方式來獲取任意一個參數:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function showAction()
{
$year = $this->dispatcher->getParam('year');
$postTitle = $this->dispatcher->getParam('postTitle');
}
}
```
```
### 循環調度(Dispatch Loop)
循環調度將會在分發器執行,直到沒有action需要執行為止。在上面的例子中,只有一個action被執行到。現在讓我們來看下“forward”(轉發)怎樣才能在循環調度里提供一個更加復雜的操作流,從而將執行轉發到另一個controller/action。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function showAction($year, $postTitle)
{
$this->flash->error("You don't have permission to access this area");
// Forward flow to another action
$this->dispatcher->forward(
array(
"controller" => "users",
"action" => "signin"
)
);
}
}
```
```
如果用戶沒有訪問某個action的權限,那么請求將會被轉發到Users控制器的signin行為。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class UsersController extends Controller
{
public function indexAction()
{
}
public function signinAction()
{
}
}
```
```
對于“forwards”轉發的次數沒有限制,只要不會形成循環重定向即可,否則就意味著你的應用將會停止(譯者注:如果瀏覽器發現一個請求循環重定向時,會終止請求)。如果在循環調度里面沒有其他action可以分發,分發器將會自動調用由 [*Phalcon\\Mvc\\View*](#) 管理的MVC的視圖層。
### 初始化控制器(Initializing Controllers)
[*Phalcon\\Mvc\\Controller*](#) 提供了初始化的函數,它會最先執行,并優于任何控制器的其他action。不推薦使用“\_\_construct”方法。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public $settings;
public function initialize()
{
$this->settings = array(
"mySetting" => "value"
);
}
public function saveAction()
{
if ($this->settings["mySetting"] == "value") {
// ...
}
}
}
```
```
> “initialize”僅僅會在事件“beforeExecuteRoute”成功執行后才會被調用。這樣可以避免在初始化中的應用邏輯不會在未驗證的情況下執行不了。
如果你想在緊接著創建控制器對象的后面執行一些初始化的邏輯,你要實現“onConstruct”方法:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function onConstruct()
{
// ...
}
}
```
```
> 需要注意的是,即使待執行的action在控制器不存在,或者用戶沒有訪問到它(根據開發人員提供的自定義控制器接入),“onConstruct”都會被執行。
### 注入服務(Injecting Services)
如果控制器繼承于 [*Phalcon\\Mvc\\Controller*](#) ,那么它可以輕松訪問應用的服務容器。例如,如果我們類似這樣注冊了一個服務:
```
<pre class="calibre14">```
<?php
use Phalcon\DI;
$di = new DI();
$di->set('storage', function () {
return new Storage('/some/directory');
}, true);
```
```
那么,我們可以通常多種方式來訪問這個服務:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class FilesController extends Controller
{
public function saveAction()
{
// 以和服務相同名字的類屬性訪問
$this->storage->save('/some/file');
// 通過DI訪問服務
$this->di->get('storage')->save('/some/file');
// 另一種方式:使用魔法getter來訪問
$this->di->getStorage()->save('/some/file');
// 另一種方式:使用魔法getter來訪問
$this->getDi()->getStorage()->save('/some/file');
// 使用數組下標
$this->di['storage']->save('/some/file');
}
}
```
```
如果你是把Phalcon作為全能(Full-Stack)框架來使用,你可以閱讀框架中 [*by default*](#) 提供的服務。
### 請求與響應(Request and Response)
假設框架預先提供了一系列的注冊的服務。我們這里將解釋如何和HTTP環境進行關聯和交互。“request”服務包含了一個 [*Phalcon\\Http\\Request*](#) 的實例,“response”服務則包含了一個 [*Phalcon\\Http\\Response*](#) 的實例,用來表示將要返回給客戶端的內容。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function saveAction()
{
// 檢查請求是否為POST
if ($this->request->isPost() == true) {
// 獲取POST數據
$customerName = $this->request->getPost("name");
$customerBorn = $this->request->getPost("born");
}
}
}
```
```
響應對象通常不會直接使用,但在action的執行前會被創建,有時候 - 如在一個afterDispatch事件中 - 它對于直接訪問響應非常有幫助:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function notFoundAction()
{
// 發送一個HTTP 404 響應的header
$this->response->setStatusCode(404, "Not Found");
}
}
```
```
如需學習了解HTTP環境更多內容,請查看專題: [*request*](#) 和 [*response*](#) 。
### 會話數據(Session Data)
會話可以幫助我們在多個請求中保持久化的數據。你可以從任何控制器中訪問 [*Phalcon\\Session\\Bag*](#)以便封裝需要進行持久化的數據。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class UserController extends Controller
{
public function indexAction()
{
$this->persistent->name = "Michael";
}
public function welcomeAction()
{
echo "Welcome, ", $this->persistent->name;
}
}
```
```
### 在控制器中使用服務(Using Services as Controllers)
服務可以是控制器,控制器類通常會從服務容器中請求。據于此,任何一個用其名字注冊的類都可以輕易地用一個控制器來替換:
```
<pre class="calibre14">```
<?php
// 將一個控制器作為服務進行注冊
$di->set('IndexController', function () {
$component = new Component();
return $component;
});
// 將一個命名空間下的控制器作為服務進行注冊
$di->set('Backend\Controllers\IndexController', function () {
$component = new Component();
return $component;
});
```
```
### 創建基控制器(Creating a Base Controller)
對于某些應用特性如訪問控制列表(ACL),翻譯,緩存,和模板引擎一般對于控制器都是通用的。在這種情況下,我們鼓勵創建一個 “基控制器”,從而確保你的代碼遵循 [DRY](http://en.wikipedia.org/wiki/Don't_repeat_yourself) 。基控制器可以是一個簡單的類,然后繼承于 [*Phalcon\\Mvc\\Controller*](#) ,并封裝全部控制器都有的通用功能操作。反過來,你的控制器則繼承這個“基控制器”以便可以直接使用通用功能操作。
這個基類可以放置在任何一個地方,但出于代碼組織的便利我們推薦應該放置在控制器的目錄下,如:apps/controllers/ControllerBase.php。我們可以在啟動文件直接require這個文件,也可以使用自動加載:
```
<pre class="calibre14">```
<?php
require "../app/controllers/ControllerBase.php";
```
```
對通用組件(action,方法,和類屬性等)也在這個基類文件里面:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class ControllerBase extends Controller
{
/**
* 這個方法可以被不同的控制器子類使用
*/
public function someAction()
{
}
}
```
```
現在,其他全部的控制都繼承于ControllerBase,然后便可訪問通用組件(如上面講到的的):
```
<pre class="calibre14">```
<?php
class UsersController extends ControllerBase
{
}
```
```
### 控制器中的事件(Events in Controllers)
控制器會自動作為 [*dispatcher*](#) 事件的偵聽者,使用這些事件并實現實現這些方法后,你便可以實現對應被執行的action的before/after鉤子函數:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function beforeExecuteRoute($dispatcher)
{
// 這個方法會在每一個能找到的action前執行
if ($dispatcher->getActionName() == 'save') {
$this->flash->error("You don't have permission to save posts");
$this->dispatcher->forward(
array(
'controller' => 'home',
'action' => 'index'
)
);
return false;
}
}
public function afterExecuteRoute($dispatcher)
{
// 在找到的action后執行
}
}
```
```
|
- [索引](# "總目錄")
- [下一頁](# "使用模型(Working with Models)") |
- [上一頁](# "MVC 架構(The MVC Architecture)") |
- 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)