Jim Cheung

A note on Symfony 2, part 1 : Creating Pages

此篇對應 http://symfony.com/doc/2.0/book/page_creation.html

Route 和 Controller

Route 係將符合某個 pattern (自定) 的 URI 指去對應的 Controller.
Controller 是處理 request 和返回 response.

Bundle

sf2 將 sf1.4 的 app 提高左, 而 plugin 就降低左. 係 sf2, 成個就是一個 app (只分 env), 而 bundle 係 sf2 就等於 sf1.4 中 app + plugin, 有自己的 config/route/controller/view/asset/service 等. sf2 修改 app folder 裡面的內容, 是 global 的, 對應 sf1.4 就是在修改 /config/ 而不是 /app/config/. sf2 中要修改到 global config, 通常係關於 env.

用 generator 開新 bundle

php app/console generate:bundle --namespace=Acme/HelloBundle --format=yml

接著的基本動作就是 create 新 route, 新 controller, 新 template

controller 和 1.4 也有點分別, 在 route 可以設定用那一個 controller. 即可將符合某個 pattern 的 routes 指去某個 controller. 這個解決了 sf1.4 在同一個 controller class 裡有太多 actions 的問題.

Trick: 移除 AcmeDemo bundle

很容易 google 得到:

> delete the src/Acme directory; > remove the routing entries referencing AcmeBundle in app/config/routing_dev.yml; > remove the AcmeBundle from the registered bundles in app/AppKernel.php;

app/AppKernel.php 統一管理各 env 下的 bundles. 想像當要大幅修改一個 bundle 時, 直接 clone 一個, register 到 dev env 改就可以, 甚至不需要 source code branching + build tools. 也可以同步進行 bug fixing 和 new feature development, 幾咁美好 ...

Clear cache

當每次改動 config 後, 記得清 cache

php app/console cache:clear --env=prod --no-debug

note: windows PHP 5.3.8, 清 cache 時會爆 error, 情況持續至 2.0.9 版本. 我沒有深究, 解決辦法是修改 /vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.phpgetTempKernelSuffix(), 把 uniqid() 的值轉為 string:

$this->name = '__'.md5(uniqid()).'__';

Template engine

sf2 用 Twig 作為 default 的 template engine, 理應比 sf1.4 更具彈性, 用到時再和 layout/partial/component/helper 等比較.

YML

最後, config file format 還會用 yml, 簡潔清晰.