在 Symfony 中建立您的第一個頁面
建立新頁面 - 無論是 HTML 頁面還是 JSON 端點 - 都是一個兩步驟的過程
- 建立控制器:控制器是您編寫的 PHP 函數,用於建構頁面。您取得傳入的請求資訊,並使用它來建立 Symfony
Response
物件,其中可以包含 HTML 內容、JSON 字串,甚至二進制檔案,例如圖像或 PDF; - 建立路由:路由是您頁面的 URL (例如
/about
),並指向控制器。
螢幕錄影
您偏好影片教學嗎?請查看 與 Symfony 和諧開發 螢幕錄影系列。
另請參閱
Symfony 擁抱 HTTP 請求-回應生命週期。若要了解更多資訊,請參閱 Symfony 與 HTTP 基礎知識。
建立頁面:路由與控制器
提示
在繼續之前,請確定您已閱讀 設定 文章,並且可以在瀏覽器中存取您的新 Symfony 應用程式。
假設您想要建立一個頁面 - /lucky/number
- 產生一個幸運數字 (嗯,隨機數字) 並列印出來。若要執行此操作,請建立一個「Controller」類別和其中的「controller」方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class LuckyController
{
public function number(): Response
{
$number = random_int(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
現在您需要將此控制器函數與公用 URL (例如 /lucky/number
) 建立關聯,以便在使用者瀏覽到該 URL 時呼叫 number()
方法。此關聯是使用 #[Route]
屬性定義的 (在 PHP 中,屬性 用於將元數據新增至程式碼)
1 2 3 4 5 6 7 8 9 10 11 12 13
// src/Controller/LuckyController.php
// ...
+ use Symfony\Component\Routing\Attribute\Route;
class LuckyController
{
+ #[Route('/lucky/number')]
public function number(): Response
{
// this looks exactly the same
}
}
就是這樣!如果您使用 Symfony Web 伺服器,請嘗試前往:https://127.0.0.1:8000/lucky/number
提示
Symfony 建議將路由定義為屬性,以便將控制器程式碼及其路由組態放在相同位置。但是,如果您偏好,可以使用 YAML、XML 和 PHP 格式在個別檔案中定義路由。
如果您看到幸運數字列印回覆給您,恭喜您!但在您衝去玩樂透之前,請查看其運作方式。還記得建立頁面的兩個步驟嗎?
bin/console
命令
您的專案已經有一個強大的除錯工具:bin/console
命令。嘗試執行它
1
$ php bin/console
您應該會看到命令清單,這些命令可以提供除錯資訊、協助產生程式碼、產生資料庫遷移等等。當您安裝更多套件時,您會看到更多命令。
若要取得系統中所有路由的清單,請使用 debug:router
命令
1
$ php bin/console debug:router
您應該會在清單中看到您的 app_lucky_number
路由
1 2 3 4 5
---------------- ------- ------- ----- --------------
Name Method Scheme Host Path
---------------- ------- ------- ----- --------------
app_lucky_number ANY ANY ANY /lucky/number
---------------- ------- ------- ----- --------------
除了 app_lucky_number
之外,您也會看到除錯路由 - 在下一節中會說明更多關於除錯路由的資訊。
當您繼續時,您將學習更多命令!
提示
如果您的 shell 受到支援,您也可以設定主控台完成支援。這會在您使用 bin/console
時自動完成命令和其他輸入。如需有關如何設定完成的更多資訊,請參閱 主控台文件。
Web 除錯工具列:除錯夢想
Symfony 的 驚人 功能之一是 Web 除錯工具列:一個工具列,在您開發時,會在頁面底部顯示大量除錯資訊。這一切都包含在開箱即用的 Symfony 套件 中,稱為 symfony/profiler-pack
。
您會在頁面底部看到一個深色工具列。您將在過程中了解更多關於它所包含的所有資訊,但請隨意實驗:將滑鼠游標停留在不同的圖示上方並按一下,以取得關於路由、效能、記錄等的資訊。
渲染模板
如果您從控制器傳回 HTML,您可能會想要渲染模板。幸運的是,Symfony 隨附 Twig:一種模板語言,它簡潔、強大且實際上非常有趣。
使用以下命令安裝 twig 套件
1
$ composer require twig
確保 LuckyController
擴展了 Symfony 的基本 AbstractController 類別
1 2 3 4 5 6 7 8 9 10
// src/Controller/LuckyController.php
// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- class LuckyController
+ class LuckyController extends AbstractController
{
// ...
}
現在,使用方便的 render()
方法來渲染模板。將 number
變數傳遞給它,以便您可以在 Twig 中使用它
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
// ...
class LuckyController extends AbstractController
{
#[Route('/lucky/number')]
public function number(): Response
{
$number = random_int(0, 100);
return $this->render('lucky/number.html.twig', [
'number' => $number,
]);
}
}
模板檔案位於 templates/
目錄中,該目錄在您安裝 Twig 時自動為您建立。建立一個新的 templates/lucky
目錄,其中包含一個新的 number.html.twig
檔案
1 2
{# templates/lucky/number.html.twig #}
<h1>Your lucky number is {{ number }}</h1>
{{ number }}
語法用於在 Twig 中列印變數。重新整理您的瀏覽器以取得您的新幸運數字!
現在您可能會想知道 Web 除錯工具列跑到哪裡去了:那是因為目前的模板中沒有 </body>
標籤。您可以自行新增 body 元素,或擴展 base.html.twig
,其中包含所有預設 HTML 元素。
在 模板 文章中,您將了解關於 Twig 的所有資訊:如何迴圈、渲染其他模板以及利用其強大的版面配置繼承系統。
查看專案結構
好消息!您已經在專案中最重要的目錄中工作過
config/
- 包含... 組態!。您將組態路由、服務 和套件。
src/
- 您的所有 PHP 程式碼都位於此處。
templates/
- 您的所有 Twig 模板都位於此處。
大多數時候,您將在 src/
、templates/
或 config/
中工作。當您繼續閱讀時,您將了解在這些目錄中可以完成哪些工作。
那麼專案中的其他目錄呢?
bin/
- 著名的
bin/console
檔案位於此處 (以及其他較不重要的可執行檔)。 var/
- 這是儲存自動建立檔案的位置,例如快取檔案 (
var/cache/
) 和記錄檔 (var/log/
)。 vendor/
- 協力廠商 (即「vendor」) 程式庫位於此處!這些是透過 Composer 套件管理器下載的。
public/
- 這是您專案的文件根目錄:您將任何可公開存取的檔案放在這裡。
當您安裝新套件時,將在需要時自動建立新目錄。