Symfony 是一個強大的 PHP Web 開發框架,採用 MVC 架構並內建依賴注入容器。本教程將引導你在十分鐘內完成一個簡單的文章管理系統(增刪改查),即使完全不熟悉 Symfony 也能輕松上手。
首先確認電腦已安裝 PHP(建議 5.4+ 版本,內建開發伺服器)與 Git。無需安裝 XAMPP 等複雜環境,僅需確保命令列可執行 php 指令。
建立專案目錄並安裝 Composer 依賴管理工具:
$ mkdir symfony-sample && cd symfony-sample $ curl -sS https://getcomposer.org/installer | php
使用 Composer 建立 Symfony 2.6.0 專案:
$ php composer.phar create-project symfony/framework-standard-edition mysampleproject/ 2.6.0
安裝過程中會詢問資料庫設定,可先全部按 Enter 略過,稍後統一修改設定檔。安裝完成後,將專案檔案移至根目錄:
$ mv mysampleproject/* ./ $ rm -rf mysampleproject
編輯 app/config/parameters.yml,貼上以下測試用設定(請將 secret 改為隨機字串):
parameters:
database_driver: pdo_mysql
database_host: localhost
database_port: 3306
database_name: symfony
database_user: root
database_password: root
mailer_transport: smtp
mailer_host: localhost
mailer_user: null
mailer_password: null
locale: en
secret: ChangeThisLineAsYouWish_ioiuqwoieru
接著編輯 app/config/config.yml,在 doctrine.dbal 區塊補上字元集設定:
driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name%" user: "%database_user%" password: "%database_password%" charset: UTF8 path: "%database_path%"
Bundle 是 Symfony 的核心概念,可視為一組獨立功能的封裝(如用戶管理、文章系統)。使用指令產生骨架:
$ php app/console generate:bundle Bundle namespace: Symfony/Bundle/SampleBundle Bundle name [SymfonySampleBundle]: Target directory [/path/to/src]: Configuration format (yml, xml, php, or annotation): yml Do you want to generate the whole directory structure [no]? yes Do you confirm generation [yes]? yes
產生的結構包含 Entity/(模型)、Controller/(控制器)、Resources/views/(模板)等目錄。
實體對應資料表,代表業務邏輯核心。使用 Doctrine 指令互動式建立 Article 實體:
$ php app/console generate:doctrine:entity The Entity shortcut name: SymfonySampleBundle:Article Configuration format (yml, xml, php, or annotation) [annotation]: yml New field name (press <return> to stop adding fields): title Field type [string]: string Field length [255]: 200 New field name: content Field type [string]: text New field name: author Field type [string]: string Field length [255]: 20 New field name: (press Enter) Do you want to generate an empty repository class [no]? yes
產生的 Entity/Article.php 包含 id、title、content、author 屬性及 Getter/Setter。執行指令同步資料庫結構:
$ php app/console doctrine:schema:update --force
修改 Article.php,使用 Assert 註解加入業務規則:標題、內容不可為空,標題長度不超過 200 字,作者可為空。
use Symfony\Component\Validator\Constraints as Assert; // ... /** @Assert\NotBlank(message="標題不可為空") @Assert\Length(max=200, maxMessage="標題不能超過200個字") */ private $title; /** @Assert\NotBlank(message="文章內容不可為空") */ private $content; /** @ORM\Column(name="author", type="string", length=20, nullable=true) */ private $author;
再次執行 doctrine:schema:update --force 更新資料表。
使用內建產生器建立完整的後台管理介面:
$ php app/console generate:doctrine:crud The Entity shortcut name: SymfonySampleBundle:Article Do you want to generate the "write" actions [no]? yes Configuration format (yml, xml, php, or annotation) [annotation]: yml Routes prefix [/article]: /article
修改 DefaultController::indexAction() 導向文章列表:
/** @Route("/", name="welcome") @Template() */
public function indexAction() { return array(); }
編輯 Resources/views/Default/index.html.twig:
<a href="{{ path('article') }}">文章管理</a>
啟動 PHP 內建伺服器:
$ php app/console server:run
瀏覽器訪問 https://localhost:8000 即可看到文章管理介面,具備新增、編輯、刪除、列表等功能。所有程式碼位於 Controller/ArticleController.php、Form/ArticleType.php、Resources/views/Article/。
本教程示範如何利用 Symfony 強大的代碼生成能力快速產出原型,實際開發中可根據需求客製化各層邏輯。完整原始碼可參考 GitHub 範例專案。