Symfony系列-建立你的第一個頁面
建立一個新頁面, 不管是html頁面還是json資料 - 都需要做這簡單的兩步:
- 建立一個路由: 一個路由就是一個指向你的頁面和你的控制器的URL (比如. /about) .
- 建立一個控制器: 一個控制器就是個你寫的建立頁面的PHP函式. 你接收來自客戶端的請求資訊, 然後根據請求來建立一個Symfony的response物件, 這個物件可以用來容納html內容, 一個json字元, 甚至可以是一個二進位制檔案, 比如說一張圖片或一個pdf檔案.
建立頁面: 路由和控制器
在我們繼續之前, 先確保你已經安裝了Symfony應用
比如說你想建立一個頁面 - /lucky/number
/lucky/number
時被執行.
// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class LuckyController
{
/**
* @Route ("/lucky/number")
*/
public function numberAction()
{
$number = mt_rand(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
測試一下, 訪問:
如果在頁面中顯示了一個隨機數字, 恭喜你! 讓我們來回顧一下, 我們是通過哪兩步來新建一個頁面的?
建立一個路由:
numberAction()
@Route
就是我們建立的路由: 它定義了這個頁面的url部分.建立一個控制器: 路由下面的方法
numberAction()
, 我們叫它控制器. 它是一個你建立頁面和返回response物件的地方.
Web除錯工具
就算你的頁面工作正常, 你也應該看看你的頁面最下面的導航條. 我們叫它Web除錯工具: 它是你除錯的蜜友. 隨著時間的推移, 你會越來越瞭解它. 現在你可以隨便點點, 把滑鼠放到上面點選不同的圖示獲取一些關於路由, 效能, 日誌資訊.
渲染模板 (通過服務容器)
如果你在控制器中返回html, 你可能會想要渲染一個模板. 幸運的是, Symfony有Twig
這樣容易, 強大, 靈活的模板引擎
首先, 保證LuckyController
繼承了Symfony的基本控制器類 Controller
:
// src/AppBundle/Controller/LuckyController.php
// ...
// --> add this new use statement
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class LuckyController extends Controller
{
// ...
}
然後, 使用render()
函式來渲染模板. 把 number
變數注入到模板當中:
// src/AppBundle/Controller/LuckyController.php
// ...
class LuckyController extends Controller
{
/**
* @Route("/lucky/number")
*/
public function numberAction()
{
$number = mt_rand(0, 100);
return $this->render('lucky/number.html.twig', array(
'number' => $number
));
}
}
最後, 模板檔案應當放在 app/Resources/views
目錄中. 建立一個新的資料夾 lucky
, 並在這個資料夾中新建一個檔案 number.html.twig
, 內容為:
{# app/Resources/views/lucky/number.html.twig #}
<h1>Your lucky number is {{ number }}</h1>
{{number}}
語法是用來在twig中輸入變數的. 重新整理你的瀏覽器, 工作正常.
檢視你的專案結構
也許你並不知道, 你已經在兩個非常重要的目錄下工作過了.
app/
包括了一些配置檔案和模板檔案. 一般來說, 這裡放一些不是php程式碼的東西.
src/
你的php程式碼放在這兒.
99%的時候, 你都會在 src/
和 app/
工作.
bin/
bin/console
檔案就放在這兒. 還有一些次要的可執行檔案.
tests/
放一些應用的測試檔案, 比如說單元測試.
var/
這個資料夾主要放一些自動生成的檔案, 比如說快取檔案和日誌檔案.
vendor/
第三方的庫全在這兒了! 通過composer包管理器下載的包都在這兒
web/
這是你的專案的根目錄, 放一些公共訪問的檔案
包和配置
你的Symfony應用已經預安裝了一些包的集合, 例如 FrameworkBundle
和 TwigBundle
. 包和外掛的概念有點像, 但有一點非常重要的區別: Symfony應用所有的功能都是來源於包.
在app/AppKernel.php
中註冊包, 每個包都提供很多工具, 有時候我們叫它服務.
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
// ...
);
// ...
return $bundles;
}
// ...
}
例如, TwigBundle
是負責新增Twig工具到你的應用中.
最後, 你將來可能會下載和安裝更多的第三方包到你的應用中, 以此來獲取更多的工具. 想象一下, 有一個幫你分頁的包, 而它是已經存在的,開箱即用.
你可以通過ap/config/config.yml
檔案來控制你的包的行為. 我們會在另外一個章節中探討更多的細節.