symfony2中的Bundle
symfony在它的第二版中引入了Bundle的概念,根据我现在粗浅的理解,这里的bundle可以看做是你所创建的web service的一个抽象。另外bundle还可以作为一个库的概念,供其他人使用。你再网上搜索“symfony2 引入第三方bundle”,就可以看到大家有很多教程再将这个事情。
好了,我今天要写的,并不是让你如何写一个bundle供别人使用;而是创建一个用来有访问页面的bundle。
创建自己的bundle
symfony2是一个快速开发工具,它提供了很多工具,可以自动生成一些符合symfony2自己的东西,这样免去了建站者的麻烦。创建一个bundle,可以使用以下命令:
php app/console generate: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 Configuration
assetic:
......
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地址。