博客 / 詳情

返回

Symfony4中文文檔: 創建你的第一個Symfony頁面

創建你的第一個Symfony頁面

創建一個新頁面 - 無論是HTML頁面還是JSON端點 - 分為兩步:

  1. 創建一個路由: 路由(route)是一個指向你的頁面URL(比如/about), 同時它映射到一個控制器.
  2. 創建一個控制器: 控制器(controller)是你為了構造頁面而寫的功能. 獲取傳入的request請求信息並用它創建一個Symfony Response對象, 該對象可以包含HTML內容, JSON字符串甚至是圖像或PDF等二進制文件.

創建一個頁面: 路由和控制器

在開始之前, 請確保你已經閲讀安裝和配置Symfony章節, 並可以在瀏覽器中訪問你的Symfony應用程序.

假設你要新建一個 /lucky/number 頁面, 用於生成一個隨機的幸運數字並且輸出它. 為此,要先創建一個控制器類和控制器方法:

<?php
// src/Controller/LuckyController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number()
    {
        $number = random_int(0, 100);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

現在, 你需要將此控制器功能與公共URL(例如: /lucky/number)相關聯, 以便在用户訪問此鏈接時執行 number() 方法. 通過在 config/routes.yaml 文件中創建路由來定義此關聯:

# config/routes.yaml

# the "app_lucky_number" route name is not important yet
app_lucky_number:
    path: /lucky/number
    controller: App\Controller\LuckyController::number

就這樣, 如果你正在使用Symfony Web服務, 可以嘗試訪問下:

http://localhost:8000/lucky/number

如果你看到幸運號碼被輸出到瀏覽器, 那麼恭喜! 但是在你開始玩彩票之前, 先要了解它是如何運行的. 還記得創建頁面的兩個步驟嗎?

  1. 創建一個路由: 在 config/routes.yaml 文件中, 路由定義了URL到頁面的映射和要調用的控制器. 在本章節中你將會了解有關路由的更多信息, 包括如何創建變量URL.
  2. 創建一個控制器: 這是一個構建並最終返回一個Response對象的功能, 在本章節中你將會了解有關控制器的更多信息, 包括如何返回JSON響應.

要更快的創建控制器, 可以讓 Symfony 來生成:

$ php bin/console make:controller

Annotation 路由

除了YAML, Symfony 允許使用annotation來定義路由. 為此, 請安裝annotation包:

$ composer require annotations

你可以直接在控制器上方添加路由:

<?php

// src/Controller/LuckyController.php

// ...
+ use Symfony\Component\Routing\Annotation\Route;

class LuckyController
{
+     /**
+      * @Route("/lucky/number")
+      */
    public function number()
    {
        // this looks exactly the same
    }
}

就這樣, 頁面 - http://localhost/lucky/number 將像以前一樣工作! Annotations 是配置路由的推薦方法.

使用 Symfony Flex 自動安裝『食譜』

你可能沒有注意到, 但當你運行 composer require annotations 時, 發生了兩件特別的事情, 這要歸功於一個名為Flex的強大的Componser插件.

首先, annotations 不是一個真正的包名: 它是Flex解析為 sensio/framework-extra-bundle 的別名.

其次, 此軟件包被下載之後, Flex執行一個『食譜』, 這是一組自動指令, 告訴Symfony如何繼承外部軟件包. Flex『食譜』適用於許多軟件包, 並且能夠做很多事情, 例如增加配置文件, 創建目錄, 更新.gitignore以及向.env文件添加新配置. Flex自動安裝軟件包, 以便於你能專注於編碼.

你可以通過閲讀 "Using Symfony Flex to Manage Symfony Applications"來了解有關Flex的更多信息. 但這不是必須的: 當你添加包時, Flex會在後台自動運行.

bin/console 命令

你的項目已經集成一個強大的調試工具: bin/console 命令. 嘗試運行一下:

$ php bin/console

你應該可以看到一組命令列表, 可以為你提供調試信息, 幫助生成代碼, 生成數據庫遷移等. 當你安裝更多軟件包時, 你將看到更多命令.

要獲取你的系統中所有路由列表, 可以使用 debug:router 命令:

php bin/console debug:router

你可以在最頂端看到你的 app_lucky_number 路由:

Name Method Scheme Host Path
app_lucky_apinumber ANY ANY ANY /lucky/number

你還將在 app_lucky_number 之後看到調試路由 - 更多信息將在下一節中介紹.

Web調試工具欄: Debugging Dream

Web Debug Toolbar 是Symfony的殺手級工具之一: 在開發過程中大量調試信息輸出在頁面底部,便於調試. 安裝 symfony/profiler-pack 即可開箱即用.

安裝好後, 頁面底部會出現一個黑色工具條. 你將瞭解更多有關它所包含的所有信息, 並可自由嘗試: 鼠標懸停或點擊工具條上不同圖標即可獲取有關路由, 性能, 日誌記錄等信息.

渲染模板

如果要從控制器返回HTML, 則可能需要渲染模板. 幸好, Symfony帶有Twig: 一個簡單,強大並且非常有趣的模板語言.

確保 LuckyController 繼承了Symfony的基礎 AbstractController 類:

// src/Controller/LuckyController.php

// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

- class LuckyController
+ class LuckyController extends AbstractController
{
    // ...
}

現在, 使用簡便的 render() 函數來渲染模板. 傳遞一個數字變量, 以便於你可以在Twig中使用它:

// src/Controller/LuckyController.php

// ...
class LuckyController extends AbstractController
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        $number = random_int(0, 100);

        return $this->render('lucky/number.html.twig', [
            'number' => $number,
        ]);
    }
}

模板文件存在於 templates/ 目錄中, 該目錄是在安裝Twig時自動創建的. 創建一個新目錄 templates/lucky , 在新目錄中創建模板文件 number.html.twig, 寫入內容:

{# templates/lucky/number.html.twig #}

<h1>Your lucky number is {{ number }}</h1>

{{number}} 語法在Twig中用來打印變量. 刷新瀏覽器以獲取新的幸運數字.

http://localhost:8000/lucky/number

現在你可能擔心Web Debug工具去了哪裏: 那是因為當前模板中沒有 </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/

這是項目的文檔根目錄: 你可以在此目錄放置任何可公開訪問的文件.

當你安裝新軟件包時, 將在需要時自動創建新目錄.

user avatar xiaoxiaocong_58ab02b3e5d1e 頭像 philip-tellis 頭像 zuiyuesi 頭像 jervain 頭像 windysay 頭像 heyiming 頭像 hiyanxu 頭像 janhuang 頭像 mrqiming 頭像 huangjuyuan 頭像 mgckid 頭像 beleveme 頭像
13 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.