建立一個新頁面 - 不管是HTML頁面仍是JSON端點 - 分爲兩步:php
在開始以前, 請確保你已經閱讀安裝和配置Symfony章節, 並能夠在瀏覽器中訪問你的Symfony應用程序.
假設你要新建一個 /lucky/number
頁面, 用於生成一個隨機的幸運數字而且輸出它. 爲此,要先建立一個控制器類和控制器方法:html
<?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
文件中建立路由來定義此關聯:git
# 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
若是你看到幸運號碼被輸出到瀏覽器, 那麼恭喜! 可是在你開始玩彩票以前, 先要了解它是如何運行的. 還記得建立頁面的兩個步驟嗎?api
config/routes.yaml
文件中, 路由定義了URL到頁面的映射和要調用的控制器. 在本章節中你將會了解有關路由的更多信息, 包括如何建立變量URL.要更快的建立控制器, 可讓 Symfony 來生成:瀏覽器
$ php bin/console make:controller
除了YAML, Symfony 容許使用annotation來定義路由. 爲此, 請安裝annotation包:緩存
$ composer require annotations
你能夠直接在控制器上方添加路由:app
<?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 是配置路由的推薦方法.composer
你可能沒有注意到, 但當你運行 composer require annotations
時, 發生了兩件特別的事情, 這要歸功於一個名爲Flex的強大的Componser插件.dom
首先, annotations
不是一個真正的包名: 它是Flex解析爲 sensio/framework-extra-bundle
的別名.
其次, 此軟件包被下載以後, Flex執行一個『食譜』, 這是一組自動指令, 告訴Symfony如何繼承外部軟件包. Flex『食譜』適用於許多軟件包, 而且可以作不少事情, 例如增長配置文件, 建立目錄, 更新.gitignore以及向.env文件添加新配置. Flex自動安裝軟件包, 以便於你能專一於編碼.
你能夠經過閱讀 "Using Symfony Flex to Manage Symfony Applications"來了解有關Flex的更多信息. 但這不是必須的: 當你添加包時, Flex會在後臺自動運行.
你的項目已經集成一個強大的調試工具: 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 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/
這是項目的文檔根目錄: 你能夠在此目錄放置任何可公開訪問的文件.
當你安裝新軟件包時, 將在須要時自動建立新目錄.