1. 程式人生 > >Symfony系列-建立你的第一個頁面

Symfony系列-建立你的第一個頁面

建立一個新頁面, 不管是html頁面還是json資料 - 都需要做這簡單的兩步:

  1. 建立一個路由: 一個路由就是一個指向你的頁面和你的控制器的URL (比如. /about) .
  2. 建立一個控制器: 一個控制器就是個你寫的建立頁面的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>' ); } }

測試一下, 訪問:

如果在頁面中顯示了一個隨機數字, 恭喜你! 讓我們來回顧一下, 我們是通過哪兩步來新建一個頁面的?

  1. 建立一個路由: numberAction()

    方法上的 @Route 就是我們建立的路由: 它定義了這個頁面的url部分.

  2. 建立一個控制器: 路由下面的方法 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應用已經預安裝了一些包的集合, 例如 FrameworkBundleTwigBundle. 包和外掛的概念有點像, 但有一點非常重要的區別: 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檔案來控制你的包的行為. 我們會在另外一個章節中探討更多的細節.