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教程有興趣的朋友有所協助。