Symfony2 以 Bundle 為核心單元,採 Twig 模板引擎。本文從環境準備、Bundle 建立、路由/控制器/模板三層繼承架構、到首頁與關於頁面實作,完整示範 Symfony2 專案啟動流程。
hosts 綁定 symfony 網域app/cache、app/logs 777 權限web/ 目錄https://symfony/app_dev.php 確認安裝,開發工具列僅開發環境顯示app_dev.php「Configure」或 parameters.ymlphp app/console generate:bundle --namespace=Blogger/BlogBundle --format=yml
採預設值自動產生控制器、路由、模板等基礎結構。
// app/AppKernel.php
$bundles = array(
// ...
new Blogger\BlogBundle\BloggerBlogBundle(),
);
# app/config/routing.yml
BloggerBlogBundle:
resource: "@BloggerBlogBundle/Resources/config/routing.yml"
prefix: /
prefix 可調整為 /blog 等子路徑。
存取 https://symfony/app_dev.php/hello/world 顯示問候。流程:
src/Blogger/BlogBundle/Resources/config/routing.yml 比對 /hello/{name}DefaultController::indexAction($name)Resources/views/Default/index.html.twig:Hello {{ name }}!移除 DefaultController、views/Default/、routing.yml 內容。
app/Resources/views/base.html.twig定義完整 HTML 骨架、區塊 (title, stylesheets, navigation, blog_title, blog_tagline, body, sidebar, footer, javascripts)、引入 Google Fonts、asset() 函數處理靜態資源路徑。
src/Blogger/BlogBundle/Resources/views/layout.html.twig{% extends '::base.html.twig' %}
{% block sidebar %}Sidebar content{% endblock %}
繼承基底並客製化側邊欄。
建立 PageController:
namespace Blogger\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class PageController extends Controller {
public function indexAction() {
return $this->render('BloggerBlogBundle:Page:index.html.twig');
}
public function aboutAction() {
return $this->render('BloggerBlogBundle:Page:about.html.twig');
}
}
首頁模板 Resources/views/Page/index.html.twig:
{% extends 'BloggerBlogBundle::layout.html.twig' %}
{% block body %}Blog homepage{% endblock %}
關於頁模板 Resources/views/Page/about.html.twig:
{% extends 'BloggerBlogBundle::layout.html.twig' %}
{% block body %}about page{% endblock %}
# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
pattern: /
defaults: { _controller: BloggerBlogBundle:Page:index }
requirements: { _method: GET }
BloggerBlogBundle_about:
pattern: /about
defaults: { _controller: BloggerBlogBundle:Page:about }
requirements: { _method: GET }
<?php ?> 標籤{% extends %} / {% block %} 三層架構靈活客製語法:{% ... %} 執行邏輯、{{ ... }} 輸出變數/運算式 (可接過濾器 |date("d-m-Y"))、{# ... #} 註解。
於 web/css/screen.css 定義完整樣式:重置、排版、導覽列、標題字體 (Google Fonts)、欄位佈局、頁尾等。
完成上述步驟,存取 https://symfony/app_dev.php 見首頁,/about 見關於頁,三層繼承架構運作正常。