symfony2中的Bundle
symfony在它的第二版中引入了Bundle的概念,根據我現在粗淺的理解,這裡的bundle可以看做是你所創建的web service的一個抽象。另外bundle也可以作為一個函式庫的概念,供其他人使用。你再上網搜尋“symfony2 引進第三方bundle”,就可以看到大家有很多教學再將這個事情。
好了,我今天要寫的,並不是讓你如何寫一個bundle供別人使用;而是創建一個用來有訪問頁面的bundle。
創建自己的bundle
symfony2是一個快速開發工具,它提供了很多工具,可以自動生成一些符合symfony2自己的東西,這樣免去了建站者的麻煩。建立一個bundle,可以使用以下指令:
<code><span>php</span><span>app/console</span><span>generate:bundle</span><span>-</span><span>-</span><span>namespace=Blogger/BlogBundle</span><span>-</span><span>-</span><span>format=yml</span></code>
很簡單的一個指令,不是嗎?
–namespace後面接的是你要建立的專案名,還有bundle名。創建好之後,生成的相應程式碼和檔案將被保存在./src/Blogger/BlogBundle
下面。
–format=yml 這句話將會制定,在創建controller時,使用yml的設定檔的方式,對url–controller路由進行設定。 symfony2除了這種方式,還提供了annotation的方式來對路由進行定義,相信使用過java spring的同學一定不會對annotation陌生。但是我個人還是比較喜歡使用設定檔的方式,因為這種方式比較集中,比較方便debug。 annotation的模式把路由定義跟程式碼放到了一起,雖然看起來減少了專案中的檔案數目,但是你需要不停的在專案中搜尋才能定位到你的url跟你的controller的對應關係,而透過配置文件,這些事情變得一目了然。
在我的專案中,我只有在entity中使用了annotation的這種方式,其他的一概使用設定檔的方法。
資料夾 | 說明 |
---|---|
Controller | 包含了controller |
的請求 | |
其中每個entity代表了一個資料庫中的資料表。 | |
表單類,此類別主要是為了麼個entity產生html的表單,為了後面的增刪改查。 | |
這裡麵包含了所有的js/css/網頁/文件。 | |
如果對用戶需要存取進行細粒度的控制,那麼就要在這裡條件相應的調整了。由於這次我並沒有太用到這個,所以不會做太多介紹。 | |
顯然,裡面都是用來測試的。 symfony2的測試使用的是phpunit。如果沒有安裝還是需要自己手動安裝一下的。 |
创建数据库实体对象
就像创建一个bundle一样,创建数据库实体也有相应的命令。
<code>php app/console doctrine:<span>generate</span>:<span>entity</span></code>
该命令是交互式的,也就是说运行过程中你需要回答它提出的一些问题。它会根据你的回答来创建你所需要的实体。
我这里的情况比较简单,根据提示,把相应的数据表的各个字段输入进去就可以了。
数据库对象的增删改查
<code>php app/console <span>generate</span>:doctrine:crud</code>
别的不多说,就这一条命令搞定。
可以看到symfony2使用的是doctrine来操作数据的。所以在你的symfony2项目开发中,少不了在网上搜索一些关于doctrine的东西,在这里就不多说了。等项目终于到了,再慢慢了解吧。
不过需要再说一句的是,当你在运行这个项目前,请确认你在数据库中已经创建了相应的数据库跟数据表,如果没有,可以使用下面这两个命令。
<code>php app/console doctrine:database:<span><span>create</span> #根据所创建的实体,来在数据库中创建数据表 php app/console doctrine:<span>schema</span>:<span>update</span> --force</span></code>
项目运行
好了,到现在为止,你一行代码没有写。尝试着运行下自己的项目看看吧。
<code>php app/console <span>server</span>:run</code>
前后端分离 , asset管理
在你的项目开发中,免不了希望前后端分离的。即使没有前后端分离,你可能会引入一些css或者js的库来对你的网页进行美化。
在symfony2中这些都是通过asset这个库来管理的。
如果你是按照我上面这个步骤来创建项目的,那么在app/config/config.yml
中你会发现一个叫做“assetic configuration”的字段。
<code>#Assetic Configuration assetic: ...... assets: base_lib_js: inputs: -<span><span>'@BloggerBlogBundler/Resources/public/js/jquery.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/bootstrap/js/bootstrap.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/bootstrap/js/bootstrap-table.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/angular/angular.min.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/angular/angular-locale_zh-cn.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/angular/angular-resource.min.js'</span></span> -<span><span>'@BloggerBlogBundler/Resources/public/lib/angular/ui-bootstrap-tpls.min.js'</span></span></code>
不要忘记把这些库也放到相应的文件夹下。
好了,再次运行你的项目前不要忘了
<code>php app/console asset:<span>dump</span></code>
这条命令会把一些使用到css或者js文件拷贝到你的web目录下,毕竟web目录才是你的项目的入口。
千万不要忘记,每一次更新css或者js时,都要执行一下上面的命令,否则你的更新将不会生效。
–env
上面的每条命令都接受--env
这个选项,用来指定是生产环境还是开发环境。如果没有指定的话,默认是开发环境。
拿上面的asset命令来说。
<code><span>php app/console asset:dump --env</span>=<span>prod</span></code>
该命令对开发环境进行asset更新。
项目部署
好了,项目开发完了,你不会再使用symfony2自带的这个web服务器了。需要注意的是你的web
文件夹才是nginx需要的root地址。
以上就介绍了symfony2快速指南(二),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。