本文主要介紹了Symfony2架構建立項目與模板設定的方法,結合執行個體形式詳細分析了Symfony2架構的具體步驟與詳細實現代碼。需要的朋友可以參考下,希望對大家有所協助。
環境準備與概覽
習慣於在windows使用netbean編輯器並使用virtualbox虛擬centos系統, 預將nginx+php-fpm+mysql, 當然apache也是不錯的選擇, 使用http://symfony在windows與centos上作為開發網域名稱。
一、下載與環境設定
1. 如何於centos上面建立開發環境不再詳述, 當然也可以在windows上面建立開發環境。
2. 關於使用 symfony代替127.0.0.1 在liunx系統中修改/etc/hosts檔案, win7系統中修改 C:\Windows\System32\drivers\etc\host 檔案(需要用管理員權限開啟)
加入類似於IP 別名1 別名2的內容即可, 如:
# /etc/hosts 127.0.0.1 symblog dev symfony
3.手動下載symfony2。
唯一需要注意的是: app/cache 和app/logs目錄需要設定成777許可權。windows的開發環境應該不存在這個問題。
4. 修改apache 或者nginx設定檔symfony網域名稱指向下載的symfony檔案的web目錄。
此時應該可以通過 http://symfony/app_dev.php 訪問到symfony的預設頁面, 有幾個demo可以參照學習。
app_dev.php 預設載入了一個開發工具條在下面, 顯示了當前頁面的一些資訊, 極大地方便了程式的調試, 只有當環境變數為dev時才會顯示。
5. 使用composer安裝時, 會提示輸出mysql等相關資訊, 需要修改這些資訊, 或者是直接下載的檔案, 可以進入頁面的“Configure” 進行相關設定。
Bundles(也許可以稱之為包, 束, 程式集,或者項目, 還是用英文吧)是symfony的基礎東東, 一個個分享出來可重複利用的代碼封裝, 甚至於symfony本身是作為一個bundles啟動並執行。 包括控制器、模組、模板, 甚至於映像與js, css樣式表等資源。 很雜亂的東西, 區別不同的bundles使用了php5.3以後的命名空間, 大部分cpenal, da虛擬機器主機好像只有php5.2版本吧, 無法運行symfony2了。
二、建立一個Bundle
在下面的例子中將建立一個部落格, Symfony 提供了大量工具來快速地建立項目。 比如我們可以用它來快速建立一個部落格的基礎bundle.
php app/console generate:bundle –namespace=Blogger/BlogBundle –format=yml
運行後直接採用所有的預設設定即可。 可以方便地建立我們所需要的基本控制器, 模組與模板等。 包含了下面的行為:
註冊Bundles
在symfony中所有使用的bundles都要求先被註冊, 有些bundles只會使用於開發測試環境(dev or test), 如前文提及的開發工具條. 下面這斷代碼顯示了bundles建立命令如何註冊BloggerBlogBundle這個bundle.
// app/AppKernel.phpclass AppKernel extends Kernel {public function registerBundles() {$bundles = array(// ..new Blogger\BlogBundle\BloggerBlogBundle(),);// .. return $bundles; } // ..}}
路由
作為一個架構, 路由功能被bundler建立器建立於app/config/routing.yml, symfony是用yml格式來儲存配置資訊。
# app/config/routing.ymlBloggerBlogBundle:resource: "@BloggerBlogBundle/Resources/config/routing.yml"prefix: /
prefix首碼選項允許我們可以將其放置於如blog、news等子目錄下。
檔案
除了以上設定檔外, 其它大部分檔案產生為src目錄下, 如同大部分mvc架構。 在src下產生Blogger目錄, 並有BlogBundle子目錄存放著各種相關東東。不同的是類似於blogger的目錄對應著php命名空間。
預設控制器
Bundle產生器在src下面產生了預設了控制器。 通過訪問: http://symfony/app_dev.php/hello/world 可以看到簡單的問候。 關於這個頁面是如何產生:
路由
還是路由, 不同的是前面的路由是在整個程式裡面註冊使用, 這裡的路由是控制具體頁面使用, src/Blogger/BlogBundle/Resources/config/routing.yml 控制了BloggerBlogBundle, 包含以下程式片斷:
# src/Blogger/BlogBundle/Resources/config/routing.ymlBloggerBlogBundle_homepage:pattern: /hello/{name}defaults: { _controller: BloggerBlogBundle:Default:index }
參數: 進行url檢測, 符合/hello/{name}結構的任意值將被賦予給{name},
方式: 沒有對形式進行限制, 理論可以put, get, post, delete所有的操作都可以進行。
後續: 如果符合以上兩條, 那麼{name}將會傳導至特定檔案, 以上為src/Blogger/BlogBundle/Controller/DefaultController.php檔案中的default控制器的index行為將被使用。
控制器
在預設生產的bundler中, 控制器行為相當簡單, {name}參數被傳入並被傳出到模板檔案:
// src/Blogger/BlogBundle/Controller/DefaultController.phpnamespace Blogger\BlogBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;class DefaultController extends Controller{public function indexAction($name){return $this->render('BloggerBlogBundle:Default:index.html.twig', array('name' => $name));}}
BloggerBlogBundle:Default:index.html.twig 會使用 BloggerBlogBundle views檔案夾中 Default檔案夾下面index.html.twig模板檔案.
模板檔案
開啟上述模板檔案, 非常簡單的一句代碼:
{# src/Blogger/BlogBundle/Resources/views/Default/index.html.twig #}Hello {{ name }}!