按照惯例,这个“第一天”其实是假的:在我而言,利用零零碎碎的时间完成了“第一天”——即一个比较专注于开发这个项目的人可以在一天,甚至半天时间内完成——的内容。
对于Symfony 2框架,我就不准备多介绍了。一言以蔽之,这是一个全面而强大的PHP框架。
这次重构有两个重要的目的:
首先是熟悉Symfony 2框架(我之前的开发是基于Symfony 1.4版本),其次是学习一些新的东西(比如Bootstrap)。
闲话不说,开始!
我的站点根目录在g:/www/rsywx2,然后Symfony框架会安装在Symfony目录下,这个目录也是我们日常工作的目录,以下的命令,如果不特别之处,都是在这个目录下运行。 另外,Apache的配置中,要将DocumentRoot设置到g:/www/rsywx2/Symfony/web下。 我下载的是所谓没有Vendor的文件包,所以解压后需要运行一个命令来安装各种预设的包:
php binvendors install这个命令需要git的支持。它会解析deps和deps.lock文件,安装各种基本的包。
安装完毕后,目录结构如下:
我这里不展开描述各个目录的功能。在以后的编程中会不断提到,大家自然就会不断熟悉。
此时,我们可以用http://localhost/app_dev.php来浏览一个示范界面。这个界面我们会很快就替换掉的。
下一步就是开始进行第一个Bundle的创建。Symfony 2中用Bundle来描述一个应用,这个Bundle中包含了Controller,Entity,Repository,Resource,Tests等内容。简单描述如下:
- Controller:MVC中的C部分,所有的程序逻辑都将在这个目录中的文件里实现。
- Entity:反应了从PHP类到数据库表格之间的映射关系,并且加入了大量的getter/setter,以及Relationship的描述。
- Resource:主要是两部分。一部分是所有的View,可以简单的理解为Web页面,Symfony 2推荐使用Twig引擎来描述页面。这个引擎也是由Symfony 2的开发者开发的。另一部分是一些config。如果你像我一样,习惯根据数据库来创建ORM,那么这里会有数据库中各个表的描述——它和Entity不同,在我的用例中,Entity是要根据这个来创建的。
- Tests:可以用来放置测试文件。
创建Bundle是向导式的,输入如下命令即可:
php appconsole generate:bundle
你需要输入一些Bundle的基本信息,Symfony会为你创建对应的一个Bundle。注意:所有的Bundle都要以Bundle结束,可以加入namespace的分割。
创建好的一个Bundle结构如上述。
下来就是设置数据库,修改app/config/parameter.ini文件,设置数据库、数据库类型、用户、密码等信息。当然,在我的用例中,我是先创建好数据库、表格的,所以数据库、表格已经全部存在了,我们需要导入这些信息:
php appconsole doctrine:mapping:importphp appconsole doctrine:generate:entities
import的时候需要指定一下格式,可以用yml,xml,php等格式。第一次运行第二个命令时,需要指定一下path,即生成的Entities要放在哪里,一般只要指定path=/src即可。这样,生成的Entity的PHP文件会放在你创建的Bundle的Entity目录下。 至此,数据库建模已经全部完成。
MVC模块中,M部分是提供数据的。我们当然可以在Controller中直接查询,但是为了更好的复用模块,我们可以创建一个Repository,将所有数据库相关的操作全部放在里面。但是,由于Doctrine本身有自己的Repository,我们必须指定我们自己的Repository来替换某个Entity缺省的Repository:
//修改srctrrsywxBundleResourcesconfigdoctrineBookReview.orm.xml文件
//这里需要加以必要的修改以匹配你import进来的文件和你的namespace和Bundle名
<entity name=trrsywxBundleEntityBookReview repository-class=trrsywxBundleRepositoryBookRepository table=book_review>
重新运行一下doctrine:generate:entities,如果之前没有Repository目录,就会创建这个目录,并在目录下创建一个BookRepository文件。
再简单讲一下Twig模板引擎。
Twig很简单。要么用{{…}}表示输出,要么用{%…%}表示控制结构。同时它支持嵌套、继承,甚至可以在模板中嵌入一个控制器。
最后简单讲一下Bootstrap。它简明、优雅,适合那些程序员来写界面。
第一天的成果大致如下,请勿见笑:
【本文收录于[go4pro.org]】
Leave a Reply