# 教程 1:讓我們通過例子來學習(Tutorial 1: Let’s learn by example)
# 教程 1:讓我們通過例子來學習(Tutorial 1: Let's learn by example)
通過這第一個教程,我們將引導您從基礎完成創建簡單的帶有注冊表單的應用。我們也將解釋框架行為的基本方面。如果您對Phalcon的自動代碼生成工具有興趣,您可以查看 [*developer tools*](#)。
### 確認安裝(Checking your installation)
我們假設你已經安裝了Phalcon。請檢查你的phpinfo()輸出了一個”Phalcon”部分引用或者執行以下代碼片段:
```
<pre class="calibre14">```
<?php print_r(get_loaded_extensions()); ?>
```
```
Phalcon 拓展應該作為輸出的一部分出現:
```
<pre class="calibre14">```
Array
(
[0] => Core
[1] => libxml
[2] => filter
[3] => SPL
[4] => standard
[5] => phalcon
[6] => pdo_mysql
)
```
```
### 創建項目(Creating a project)
使用本指南的最好方法就是依次按照每一步來做。你可以得到完整的代碼 [點擊這里](https://github.com/phalcon/tutorial).
### 文件結構(File structure)
Phalcon不會強制要求應用程序的開發遵循特定的文件結構。因為它是松散耦合的,你可以實現Phalcon驅動的應用程序,以及使用對你來說最舒服的文件結構。
本教程的目的以此為起點,我們建議使用以下結構:
```
<pre class="calibre14">```
tutorial/
app/
controllers/
models/
views/
public/
css/
img/
js/
```
```
需要注意的是,你不需要任何有關Phalcon的 “library” 目錄。該框架已經被加載到內存中,供您使用。
### 優美的 URL(Beautiful URLs)
在本教程中,我們將使用相當(友好)URL。友好的URL不但利于SEO而且便于用戶記憶。Phalcon支持一些最流行的Web服務器提供重寫模塊。讓你的應用程序的URL友好不是必要的,沒有它們你可以同樣輕松地開發。
在這個例子中,我們將使用Apache的重寫模塊。 讓我們在 /tutorial/.htaccess 文件中創建幾個重寫規則:
```
<pre class="calibre14">```
#/tutorial/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</IfModule>
```
```
對該項目的所有請求都將被重定向到為public/文檔根目錄。此步驟可確保內部項目的文件夾仍然對公共訪客隱藏,從而消除了一些安全威脅。
第二組規則將檢查是否存在所請求的文件,如果存在所要請求的文件,就不需要Web服務器模塊來重寫:
```
<pre class="calibre14">```
#/tutorial/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
```
```
### 引導程序(Bootstrap)
你需要創建的第一個文件是引導文件。這個文件很重要; 因為它作為你的應用程序的基礎,用它來控制應用程序的各個方面。在這個文件中,你可以實現組件的初始化和應用程序的行為。
這個引導文件 tutorial/public/index.php 文件應該看起來像:
```
<pre class="calibre14">```
<?php
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
try {
// Register an autoloader
$loader = new Loader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
// Create a DI
$di = new FactoryDefault();
// Setup the view component
$di->set('view', function () {
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
// Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function () {
$url = new UrlProvider();
$url->setBaseUri('/tutorial/');
return $url;
});
// Handle the request
$application = new Application($di);
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo "PhalconException: ", $e->getMessage();
}
```
```
### 自動加載(Autoloaders)
我們可以看出,引導程序的第一部分是注冊一個自動加載器。在這個應用程序里,它將用于加載控制器和模型類。例如,我們可以為控制器注冊一個或多個目錄來增加應用程序的靈活性的。在我們的例子中,我們使用了 Phalcon\\Loader 組件。
有了它,我們可以加載使用各種策略類,但在這個例子中,我們選擇了在預定義的目錄中查找類:
```
<pre class="calibre14">```
<?php
use Phalcon\Loader;
// ...
$loader = new Loader();
$loader->registerDirs(
array(
'../app/controllers/',
'../app/models/'
)
)->register();
```
```
### 依賴管理(Dependency Management)
在使用Phalcon時必須理解的一個非常重要的概念是 [*依賴注入容器(dependency injection container)*](#). 這聽起來復雜,但實際上非常簡單實用。
服務容器是一個全局存儲的將要被使用的應用程序功能包。每次框架需要的一個組件時,會請求這個使用協定好名稱的服務容器。因為Phalcon是一個高度解耦的框架,Phalcon\\DI 作為黏合劑,促使不同組件的集成,以一個透明的方式實現他們一起進行工作。
```
<pre class="calibre14">```
<?php
use Phalcon\DI\FactoryDefault;
// ...
// Create a DI
$di = new FactoryDefault();
```
```
[*Phalcon\\DI\\FactoryDefault*](#) 是 Phalcon\\DI 的一個變體。為了讓事情變得更容易,它已注冊了Phalcon的大多數組件。因此,我們不需要一個一個注冊這些組件。在以后更換工廠服務的時候也不會有什么問題。
在接下來的部分,我們注冊了“視圖(view)”服務,指示框架將去指定的目錄尋找視圖文件。由于視圖并非PHP類,它們不能被自動加載器加載。
服務可以通過多種方式進行登記,但在我們的教程中,我們將使用一個匿名函數 [anonymous function](http://php.net/manual/en/functions.anonymous.php):
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\View;
// ...
// Setup the view component
$di->set('view', function () {
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
```
```
接下來,我們注冊一個基礎URI,這樣通過Phalcon生成包括我們之前設置的“tutorial”文件夾在內的所有的URI。我們使用類 [*Phalcon\\Tag*](#) 生成超鏈接,這將在本教程后續部分很重要。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Url as UrlProvider;
// ...
// Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function () {
$url = new UrlProvider();
$url->setBaseUri('/tutorial/');
return $url;
});
```
```
在這個文件的最后部分,我們發現 [*Phalcon\\Mvc\\Application*](#)。其目的是初始化請求環境,并接收路由到來的請求,接著分發任何發現的動作;收集所有的響應,并在過程完成后返回它們。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Application;
// ...
$application = new Application($di);
echo $application->handle()->getContent();
```
```
正如你所看到的,引導文件很短,我們并不需要引入任何其他文件。在不到30行的代碼里,我們已經為自己設定一個靈活的MVC應用程序。
### 創建控制器(Creating a Controller)
默認情況下Phalcon會尋找一個名為“Index”的控制器。當請求中沒有控制器或動作時,則使用“Index”控制器作為起點。這個“Index”控制器 (app/controllers/IndexController.php) 看起來類似:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo "<h1>Hello!</h1>";
}
}
```
```
該控制器類必須有“Controller”后綴,且控制器動作必須有“Action”后綴。如果你從瀏覽器訪問應用程序,你應該看到這樣的事情:

恭喜, 讓Phalcon帶你飛!
### 輸出到視圖(Sending output to a view)
從控制器發送輸出到屏幕上有時是必要的,但是在MVC社區,大多數純粹主義者證明這樣做不可取。一切必須傳遞給視圖,視圖負責在屏幕上輸出數據。Phalcon將在最后執行的控制器的同名目錄中,查找最后執行的動作的同名的視圖。在我們的例子 (app/views/index/index.phtml) :
```
<pre class="calibre14">```
<?php echo "<h1>Hello!</h1>";
```
```
我們的控制器 (app/controllers/IndexController.php) 現在定義了一個空的動作:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
}
}
```
```
瀏覽器輸出應該保持不變。當這個動作已經執行結束 [*Phalcon\\Mvc\\View*](#) 靜態組件會自動創建。學習更多關于 [*視圖使用教程*](#) 。
### 設計注冊表單(Designing a sign up form)
現在我們將改變index.phtml視圖文件,添加一個鏈接到一個名為“signup”的新控制器。我們的目標是在應用程序中允許用戶注冊。
```
<pre class="calibre14">```
<?php
echo "<h1>Hello!</h1>";
echo Phalcon\Tag::linkTo("signup", "Sign Up Here!");
```
```
生成的HTML代碼顯示一個錨 (“a”) HTML標簽鏈接到一個新的控制器:
```
<pre class="calibre14">```
<h1>Hello!</h1> <a href="/tutorial/signup">Sign Up Here!</a>
```
```
我們使用類 [*Phalcon\\Tag*](#) 去生成標記。 這是一個讓我們構建HTML標記的實用類。 關于生成HTML更詳細的文章可以查看 [*視圖助手*](#)

這是一個注冊控制器 (app/controllers/SignupController.php):
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class SignupController extends Controller
{
public function indexAction()
{
}
}
```
```
這個空index動作整潔的傳遞了表單定義給一個視圖 (app/views/signup/index.phtml):
```
<pre class="calibre14">```
<h2>Sign up using this form</h2>
<?php echo $this->tag->form("signup/register"); ?>
<p>
<label for="name">Name</label>
<?php echo $this->tag->textField("name") ?>
</p>
<p>
<label for="email">E-Mail</label>
<?php echo $this->tag->textField("email") ?>
</p>
<p>
<?php echo $this->tag->submitButton("Register") ?>
</p>
</form>
```
```
在瀏覽器中查看表單將顯示類似的頁面:

[*Phalcon\\Tag*](#) 還提供了有用的方法來構建表單元素。
Phalcon\\Tag::form 方法只接受一個參數實例, 一個相對uri到這個應用的一個控制器/動作。
通過單擊“Send”按鈕,您將注意到框架拋出了一個異常,這表明我們是錯過了在控制器中注冊“register”動作。我們的 public/index.php 文件拋出這個異常:
> PhalconException: Action “register” was not found on controller “signup”
實現該方法將移除異常:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class SignupController extends Controller
{
public function indexAction()
{
}
public function registerAction()
{
}
}
```
```
如果你再點擊“Send”按鈕,您將看到一個空白頁。提供的名稱和電子郵件的輸入的這個用戶應該被存儲在數據庫中。根據MVC的指導方針,必須通過數據庫交互模型,確保整潔的面向對象的代碼。
### 創建模型(Creating a Model)
Phalcon帶來的第一個完全用C語言編寫的PHP ORM。它簡化了開發, 而不是增加了開發的復雜性。
創建我們的第一個模型之前,我們需要在Phalcon以外創建一個數據庫表。一個用來存儲注冊用戶的簡單表,可以這樣定義:
```
<pre class="calibre14">```
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(70) NOT NULL,
`email` varchar(70) NOT NULL,
PRIMARY KEY (`id`)
);
```
```
模型應該位于 app/models 目錄 (app/models/Users.php). 這個模型對應“users”表:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Model;
class Users extends Model
{
}
```
```
### 設置數據庫連接(Setting a Database Connection)
為了能夠使用一個數據庫連接,然后通過我們的模型訪問數據,我們需要在我們的引導過程指定它。數據庫連接是我們的應用程序可以使用的數個組件中的另一個服務:
```
<pre class="calibre14">```
<?php
use Phalcon\Loader;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
try {
// Register an autoloader
$loader = new Loader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
// Create a DI
$di = new FactoryDefault();
// Setup the database service
$di->set('db', function () {
return new DbAdapter(array(
"host" => "localhost",
"username" => "root",
"password" => "secret",
"dbname" => "test_db"
));
});
// Setup the view component
$di->set('view', function () {
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
// Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function () {
$url = new UrlProvider();
$url->setBaseUri('/tutorial/');
return $url;
});
// Handle the request
$application = new Application($di);
echo $application->handle()->getContent();
} catch (\Exception $e) {
echo "Exception: ", $e->getMessage();
}
```
```
使用正確的數據庫參數,我們的模型已經準備和應用程序的其余部分工作。
### 使用模型保存數據(Storing data using models)
下一個步驟是從表單接收數據存儲在表中。
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class SignupController extends Controller
{
public function indexAction()
{
}
public function registerAction()
{
$user = new Users();
// Store and check for errors
$success = $user->save($this->request->getPost(), array('name', 'email'));
if ($success) {
echo "Thanks for registering!";
} else {
echo "Sorry, the following problems were generated: ";
foreach ($user->getMessages() as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
}
```
```
然后我們實例化用戶類,它對應于一個用戶記錄。類的公共屬性映射到用戶表中的記錄的字段。在新記錄中設置相應的值并調用save()將在數據庫中存儲的數據記錄。save()方法返回一個布爾值,表示存儲的數據是否成功。
ORM自動轉義輸入以防止SQL注入,所以我們只需要將請求傳遞給save()方法。
附加的自動驗證會驗證字段定義為not null(必需)。如果我們不輸入任何必需的注冊表單中的字段,我們的屏幕將會看起來像這樣:

### 結束語(Conclusion)
This is a very simple tutorial and as you can see, it's easy to start building an application using Phalcon.The fact that Phalcon is an extension on your web server has not interfered with the ease of development orfeatures available. We invite you to continue reading the manual so that you can discover additional features offered by Phalcon!
這是一個非常簡單的教程,正如你所看到的,使用Phalcon很容易開始構建應用程序。Phalcon是一個在你的web服務器上沒有干擾、易于開發、特性優良的擴展。我們邀請你繼續閱讀手冊,這樣你就可以發現Phalcon提供的附加功能!
|
- [索引](# "總目錄")
- [下一頁](# "教程 2:Introducing INVO(Tutorial 2: Introducing INVO)") |
- [上一頁](# "使用 PHP 內置 web 服務器(Using PHP Built-in webserver)") |
- 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)