首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Symfony 建立頁面完整教學:路由、控制器、模板與專案結構深度解析

     編輯:PHP 相關知識

建立頁面三步驟

  1. 路由:定義 URL 模式對應控制器
  2. 控制器:處理請求、回傳 Response 物件
  3. 模板 (可選):渲染 HTML 內容

實戰範例:Hello 頁面

1. 建立 Bundle

php app/console generate:bundle --namespace=Acme/StudyBundle

註冊 AppKernel.php、autoload.php (Symfony 3.4+ 使用 Composer PSR-4 自動載入,無需手動註冊)。

2. 定義路由

# app/config/routing.yml
hello:
    path: /hello/{name}
    defaults: { _controller: AcmeStudyBundle:Hello:index }

{name} 為動態參數,自動傳遞給控制器。

3. 建立控制器

// src/Acme/StudyBundle/Controller/HelloController.php
namespace Acme\StudyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class HelloController extends Controller {
    public function indexAction($name) {
        // 方案 A: 直接回傳 Response
        return new Response('Hello '.$name.'!');
        
        // 方案 B: 使用模板 (繼承 Controller 基類)
        return $this->render('AcmeStudyBundle:Hello:index.html.twig', [
            'name' => $name
        ]);
    }
}

4. 建立模板

{# src/Acme/StudyBundle/Resources/views/Hello/index.html.twig #}
{% extends '::layout.html.twig' %}
{% block body %}
    Hello {{ name }}!
{% endblock %}
{# app/Resources/views/layout.html.twig #}



    
    {% block title %}Hello Application{% endblock %}


    {% block body %}{% endblock %}

專案目錄結構解析

目錄用途
app/應用配置、快取、日誌、全域模板
src/專案 PHP 代碼 (Bundle)
vendor/第三方函式庫 (Composer 管理)
web/Web 根目錄、靜態資源、前端控制器

web/ 目錄與前端控制器

// web/app.php (生產環境)
require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', false);
$kernel->handle(Request::createFromGlobals())->send();

開發環境用 app_dev.php (debug=true、WebProfiler)。Apache Rewrite 可隱藏 app.php。

app/ 目錄核心檔案

  • AppKernel.php:註冊 Bundle、載入配置、定義根目錄
  • config/:config.yml (主配置)、routing.yml、環境別配置 config_dev.yml 等
  • cache/、logs/:快取與日誌 (生產環境部署需可寫入)
  • Resources/:全域模板、翻譯檔

自動載入機制

// app/autoload.php (舊版) / composer.json (現代)
$loader->registerNamespaces([
    'Acme' => __DIR__.'/../src',
]);

PSR-4:Acme\StudyBundle\Controller\HelloController → src/Acme/StudyBundle/Controller/HelloController.php。

Bundle 系統深度解析

Bundle 結構慣例

AcmeStudyBundle/
├── Controller/          # 控制器
├── Resources/
│   ├── config/          # 路由、服務配置
│   ├── views/           # 模板 (Controller名/Action名.html.twig)
│   └── public/          # 靜態資源 (安裝至 web/bundles/)
├── Tests/               # 單元測試
└── AcmeStudyBundle.php  # Bundle 類別

建立 Bundle 命令

php app/console init:bundle "Acme\TestBundle" src

自動生成骨架:控制器、模板、路由、Bundle 類別。

配置系統

三種格式對比

  • YAML:簡潔易讀,預設格式
  • XML:IDE 自動完成支援佳,嚴格結構
  • PHP:動態邏輯彈性大,但可讀性較低

環境機制

同一代碼庫、不同配置:

  • dev:app_dev.php、詳細錯誤、重新編譯、Profiler
  • prod:app.php、快取優化、僅記錄錯誤
  • test:自動化測試環境
// AppKernel.php
public function registerContainerConfiguration(LoaderInterface $loader) {
    $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}

環境配置繼承:config_dev.yml import config.yml 並覆寫特定設定。

總結

Symfony 頁面建立遵循「路由→控制器→模板」清晰分層。Bundle 封裝功能模組,配置分環境管理,前端控制器統一入口。掌握目錄結構、自動載入、環境機制,能高效開發可維護的應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved