symfony2快速指南(二)

來源:互聯網
上載者:User
symfony2中的Bundle

symfony在它的第二版中引入了Bundle的概念,根據我現在粗淺的理解,這裡的bundle可以看做是你所建立的web service的一個抽象。另外bundle還可以作為一個庫的概念,供其他人使用。你再網上搜尋“symfony2 引入第三方bundle”,就可以看到大家有很多教程再將這個事情。

好了,我今天要寫的,並不是讓你如何寫一個bundle供別人使用;而是建立一個用來有訪問頁面的bundle。

建立自己的bundle

symfony2是一個快速開發工具,它提供了很多工具,可以自動產生一些符合symfony2自己的東西,這樣免去了建站者的麻煩。建立一個bundle,可以使用以下命令:

phpapp/consolegenerate:bundle--namespace=Blogger/BlogBundle--format=yml

很簡單的一個命令,不是嗎?

–namespace後面跟的是你要建立的項目名,還有bundle名。建立好之後,產生的相應代碼和檔案將被儲存在./src/Blogger/BlogBundle下面。

–format=yml 這句將制定,在建立controller時,使用yml的設定檔的方式,對url–controller路由進行配置。symfony2除了這種方式,還提供了annotation的方式來對路由進行定義,相信使用過java spring的同學一定不會對annotation陌生。但是我個人還是更喜歡使用設定檔的方式,因為這種方式更集中,更方便於debug。annotation的模式把路由定義跟代碼放到了一起,雖然看起來減少了項目中的檔案數目,但是你需要不停的在項目中搜尋才能定位到你的url跟你的controller的對應關係,而通過設定檔,這些事情變得一目瞭然。

在我的項目中,我只有在entity中使用了annotation的這種方式,其他的一概使用設定檔的方法。

檔案架結構

檔案夾 說明
Controller 包含了所有controller的代碼,這些controller是為了處理用戶端發來的請求的。
Entity 其中每個entity代表了一個資料庫中的資料表。
Form 表單類,該類主要是為了麼個entity產生html的表單,為了後面的增刪改查。
Resource 這裡麵包含了所有的js/css/網頁/文檔。
Security 如果對使用者需要訪問進行細粒度的控制,那麼就要在這裡條件相應的調整了。由於這一次我並沒有太用到這個,所以不會做太多介紹。
Tests 顯然,裡面都是用來測試的。symfony2的測試使用的是phpunit。如果沒有安裝還是需要自己手動安裝一下的。
Validator 這裡麵包含的對一些欄位的驗證資訊。這一次,我的表單中包含了json資料的輸入,我在這裡添加了json schema以對使用者輸入的json資料進行驗證。

建立資料庫實體物件

就像建立一個bundle一樣,建立資料庫實體也有相應的命令。

php app/console doctrine:generate:entity

該命令是互動,也就是說運行過程中你需要回答它提出的一些問題。它會根據你的回答來建立你所需要的實體。
我這裡的情況比較簡單,根據提示,把相應的資料表的各個欄位輸入進去就可以了。

資料庫物件的增刪改查

php app/console generate:doctrine:crud

別的不多說,就這一條命令搞定。
可以看到symfony2使用的是doctrine來操作資料的。所以在你的symfony2項目開發中,少不了在網上搜尋一些關於doctrine的東西,在這裡就不多說了。等項目終於到了,再慢慢瞭解吧。
不過需要再說一句的是,當你在運行這個項目前,請確認你在資料庫中已經建立了相應的資料庫跟資料表,如果沒有,可以使用下面這兩個命令。

php app/console doctrine:database:create#根據所建立的實體,來在資料庫中建立資料表php app/console doctrine:schema:update --force

項目運行

好了,到現在為止,你一行代碼沒有寫。嘗試著運行下自己的項目看看吧。

php app/console server:run

前後端分離 , asset管理

在你的項目開發中,免不了希望前後端分離的。即使沒有前後端分離,你可能會引入一些css或者js的庫來對你的網頁進行美化。

在symfony2中這些都是通過asset這個庫來管理的。
如果你是按照我上面這個步驟來建立項目的,那麼在app/config/config.yml中你會發現一個叫做“assetic configuration”的欄位。

#Assetic Configurationassetic:    ......    assets:        base_lib_js:            inputs:                -'@BloggerBlogBundler/Resources/public/js/jquery.js'                -'@BloggerBlogBundler/Resources/public/lib/bootstrap/js/bootstrap.js'                -'@BloggerBlogBundler/Resources/public/lib/bootstrap/js/bootstrap-table.js'                -'@BloggerBlogBundler/Resources/public/lib/angular/angular.min.js'                -'@BloggerBlogBundler/Resources/public/lib/angular/angular-locale_zh-cn.js'                -'@BloggerBlogBundler/Resources/public/lib/angular/angular-resource.min.js'                -'@BloggerBlogBundler/Resources/public/lib/angular/ui-bootstrap-tpls.min.js'

不要忘記把這些庫也放到相應的檔案夾下。

好了,再次運行你的項目前不要忘了

php app/console asset:dump

這條命令會把一些使用到css或者js檔案拷貝到你的web目錄下,畢竟web目錄才是你的項目的入口。

千萬不要忘記,每一次更新css或者js時,都要執行一下上面的命令,否則你的更新將不會生效。

–env

上面的每條命令都接受--env這個選項,用來指定是生產環境還是開發環境。如果沒有指定的話,預設是開發環境。

拿上面的asset命令來說。

php app/console asset:dump --env=prod

該命令對開發環境進行asset更新。

項目部署

好了,項目開發完了,你不會再使用symfony2內建的這個web伺服器了。需要注意的是你的web檔案夾才是nginx需要的root地址。

以上就介紹了symfony2快速指南(二),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.