# 控制器
控制器其實就是一個PHP類。
控制器的作用在于,接受來自路由的調度,進行相應的工作(獲取請求的參數,進行數據庫的查詢或操作,對返回的數據加以進一步的處理,顯示一個模板并對模板中的變量加以賦值)。
出于管理的需要,我們通常將對某個實體進行操作的工作集中歸并到一個類中,這個類的名稱、類中方法的命名都遵循一定的規范。
## 類的名稱和類成員的名稱
從之前我們討論的[路由](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/03.03%20route.html)中,我們看到這樣一個路由:
~~~
homepage:
pattern: /
defaults: { _controller: AppBundle:Default:index }
~~~
我們知道這個路由表示的路徑是`/`,也就是一般意義上的站點首頁的位置,而它對應的控制器是`AppBundle:Default:index`,再回想一下我們在[包](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/03.02%20bundle.html)這一章中展示的包結構圖,SF的規定是這樣的:
1. 所有的控制器都位于`AppBundle\Controller`目錄下。
2. 定義控制器類的文件命名規范是:*Name*+Controller.php。而這里的`name`和該路由定義的`AppBundle:Default:index`的第二部分(也就是`Default`)一樣。所以,針對`homepage`這個路由,我們必然要有一個`DefaultController.php`的文件與之對應。
3. 這個文件必須定義一個*Name*Controller的類,且這個類必須派生于`Controller`類。
4. 鑒于路由定義的第三部分`index`,它規定了具體采用什么動作。與之對應的是這個類中的成員函數。這個成員函數必須是`public`,而且命名為`indexAction`。也就是說,它的名稱是路由定義中的第三部分`action`加上`Action`這個后綴。
5. 函數參數的定義必須和路由中的要求一致。參數出現的順序并不是特別重要,但是名字必須和路由中指定的參數名稱有對應。我們會在以后再更詳細地討論路由參數和控制器參數的問題。
6. 控制器類必須有自己的`namespace`聲明。通常它就是該文件所在目錄,因此它應該總是`namespace AppBundle\Controller;`。
一個典型的控制器類的代碼可能是這樣的:
~~~
//File: src/AppBundle/Controller/DefaultController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;
class DefaultController extends Controller
{
public function indexAction()
{
// Code for index action.
}
// More codes and more actions
}
~~~
上述代碼中出現的一些`use`語句,我們在此不多做解釋。只說明一點:它們是根據控制器中代碼的需要所引入的命名空間。
關于控制器,本節就描述到這里。控制器是SF中最關鍵的一個概念,也是我們用SF編寫應用時寫代碼最多、業務邏輯最集中的一個地方。
- 引言
- 1 LAMP
- 1.1 安裝虛擬機
- 1.2 安裝Vagrant
- 1.3 安裝Ubuntu
- 1.4 安裝Apache 2
- 1.5 安裝PHP
- 1.6 安裝MySQL服務器
- 1.7 最后的微調
- 1.8 設置一個虛擬主機
- 1.9 一個趁手的IDE
- 2 Symfony 3和重要構件
- 2.1 Symfony 3
- 2.2 Doctrine
- 2.3 Twig
- 2.4 Composer
- 3 Symfony重要概念
- 3.1 MVC
- 3.2 Bundle/包
- 3.3 Route/路由
- 3.4 Controller/控制器
- 3.5 Entity/實體
- 3.6 Repository/倉庫
- 3.7 Template/模板
- 3.8 Test/測試
- 4 藏書管理程序的結構
- 5 創建應用
- 5.1 建立版本管理
- 5.2 建立數據庫
- 5.3 應用結構
- 5.4 建立數據庫實體
- 5.5 樣本數據
- 5.6 路由
- 5.7 模板
- 5.8 開始編寫首頁
- 5.9 書籍詳情頁面
- 5.10 書籍列表頁面
- 5.11 書籍搜索
- 6 用戶和后臺
- 7 結語