重构“任氏有无轩”——第一天

  tr
  PHP相关
  2012-08-07
  增加更多TAG »
  2,653次

按照惯例,这个“第一天”其实是假的:在我而言,利用零零碎碎的时间完成了“第一天”——即一个比较专注于开发这个项目的人可以在一天,甚至半天时间内完成——的内容。

对于Symfony 2框架,我就不准备多介绍了。一言以蔽之,这是一个全面而强大的PHP框架。

这次重构有两个重要的目的:首先是熟悉Symfony 2框架(我之前的开发是基于Symfony 1.4版本),其次是学习一些新的东西(比如Bootstrap)。

闲话不说,开始!

我的站点根目录在g:\www\rsywx2,然后Symfony框架会安装在Symfony目录下,这个目录也是我们日常工作的目录,以下的命令,如果不特别之处,都是在这个目录下运行。

另外,Apache的配置中,要将DocumentRoot设置到g:\www\rsywx2\Symfony\web下。

我下载的是所谓没有Vendor的文件包,所以解压后需要运行一个命令来安装各种预设的包:

php bin\vendors install

这个命令需要git的支持。它会解析deps和deps.lock文件,安装各种基本的包。

安装完毕后,目录结构如下:

symfony2-tree

我这里不展开描述各个目录的功能。在以后的编程中会不断提到,大家自然就会不断熟悉。

此时,我们可以用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 app\console generate:bundle

你需要输入一些Bundle的基本信息,Symfony会为你创建对应的一个Bundle。注意:所有的Bundle都要以Bundle结束,可以加入namespace的分割。创建好的一个Bundle结构如上述。

下来就是设置数据库,修改app/config/parameter.ini文件,设置数据库、数据库类型、用户、密码等信息。当然,在我的用例中,我是先创建好数据库、表格的,所以数据库、表格已经全部存在了,我们需要导入这些信息:

php app\console doctrine:mapping:import
php app\console doctrine:generate:entities

import的时候需要指定一下格式,可以用yml,xml,php等格式。第一次运行第二个命令时,需要指定一下path,即生成的Entities要放在哪里,一般只要指定path=”src即可。这样,生成的Entity的PHP文件会放在你创建的Bundle的Entity目录下。

至此,数据库建模已经全部完成。

MVC模块中,M部分是提供数据的。我们当然可以在Controller中直接查询,但是为了更好的复用模块,我们可以创建一个Repository,将所有数据库相关的操作全部放在里面。但是,由于Doctrine本身有自己的Repository,我们必须指定我们自己的Repository来替换某个Entity缺省的Repository:

//修改src\tr\rsywxBundle\Resources\config\doctrine\BookReview.orm.xml文件
//这里需要加以必要的修改以匹配你import进来的文件和你的namespace和Bundle名
<entity name="tr\rsywxBundle\Entity\BookReview" repository-class="tr\rsywxBundle\Repository\BookRepository" table="book_review">

重新运行一下doctrine:generate:entities,如果之前没有Repository目录,就会创建这个目录,并在目录下创建一个BookRepository文件。

再简单讲一下Twig模板引擎。

Twig很简单。要么用{{…}}表示输出,要么用{%…%}表示控制结构。同时它支持嵌套、继承,甚至可以在模板中嵌入一个控制器。

最后简单讲一下Bootstrap。它简明、优雅,适合那些程序员来写界面。

第一天的成果大致如下,请勿见笑:

symfony2-day1-index

【本文收录于[go4pro.org]


除非另有来自Go4Pro.org或原作者的显式声明,本站点所有文章都按照知识共享许可协议知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。

Go4Pro.org,V3.0,2009-2014。本站点采用SymfonyBootstrapTwig等技术开发。