在前面几篇中已经设置了环境、创建了项目、也设置好了虚拟主机,接下来就要进行核心部分的编程了。就编程来说最经典的就是MVC了,而一个好的框架更是可以把MVC的思想发挥得淋漓尽致,Symfony就是这样的好框架!在Symfony看来,MVC框架如下图所示:

 

Symfony1.4.11学习笔记(四):数据模型_Schema 

这种模式将代码分离为3个层 :

  • 模型层(Model )定义业务逻辑(数据库属于这个层)。 symfony将与模型层关联的所有类和文件都放在lib/model 目录下。

  • 视图层(View )是与用户交互的层(模板引擎是这个层的一部分)。在symfony中,视图层主要由PHP模板组成。这些文件存储在不同的templates/ 目录中,当然这并不是一个很好地做法,因为PHP太灵活了,这会使很多人不知不觉得将业务逻辑写到这一层中。好在Symfony也意识到了这一点,在Symfony2中已经将Twig做为模板使用了。

  • 控制层(Controller )是一段代码,它从模型层读取数据传送给视图层,由视图层显示到客户端。先前我们看到来自用户的所有请求都由前端控制器(index.phpf rontend_dev.php )管理。这些前端控制器(front controllers)将实际工作交由动作(actions )处理,这些动作将被合理地组织到模块 (modules)中。

这一篇主要是学习Symfony如何进行“M”的,:)!

1、进行关系数据库的设计

由于本人比较喜欢使用工具进行设计,如MySQL WorkBench。本来的想法是从工具设计数据库,然后创建数据库,再使用php symfony doctrine:build-schema命令自动生成Schema文件,从而省略以下2-4步,但很遗憾,使用命令自动生成的Schema文件和数据库不一致,需要再做修改,而无法直接使用。还有个方法是使用johmue的Schema导出脚本,将MySQL WorkBench生成的mwb文件转成doctrains的schame文件,不过由于看上去有点复杂,所以没有去尝试,有兴趣的兄弟不妨一试。

2、就是选择ORM工具

在Symfony中支持两种基于PHP的ORM工具:Doctrains和Propel,我选择了Doctrains,原因很简单,Symfony 默认使用它!(其实我选择它是因为Symfony 在1.2时还默认使用Propel,而1.4却默认使用Doctraine,而在Symfony2中也默认使用Doctraine,所以为了以后升级顺利选择了Doctraine)。

3、配置数据库参数

这个很简单,可以直接在config/databases.yml中直接配置,也可以使用命令:

php symfony configure:database "mysql:host=localhost;dbname=jobeet" jobeet jobeet

或者直接在NetBeans上找到configure:database命令,然后在参数中输入 "mysql:host=localhost;dbname=jobeet" jobeet jobeet,点击运行,也可以达到同样的效果。(看到这里,大家对如何NetBeans中运行symfony命令 应该比较清楚了,所以 下面就偷个懒,直接写命令了

4、编写Doctrains的Schema文件(YAML格式)

config/doctrine/schema.yml中直接编写YAML格式的文件

5、从Schema中构建模型文件

php symfony doctrine:build --model (使用
php symfony doctrine:build-model也行,这两个命令应该是等价的)

这个命令从config/doctrine/*.yml中读取Schema,然后将构建的模型文件被放置在lib/model/doctraine中。
注意:该命令不会影响lib/model/doctraine中的自定义类,只是替换lib/model/doctraine/base目录中的文件(这种处理方式真是优雅啊!)

6、生成SQL文件

php symfony doctrine:build --sql (也可使用等价命令
php symfony doctrine:build-sql)

从模型文件中生成SQL语句,该命令会从config/databases.yml文件中获得数据库的类型,然后生成经过优化的SQL语句。

7、生成数据表

php symfony doctrine:insert-sql

该命令连接数据库,并根据lib/model/doctrine/*.class.php文件生成数据表。

8、录入初始数据

首先生成初始数据,在data/fixtures/*.yml中直接编写与数据表同名的YAML格式文件。

然后运行下列命令

php symfony doctrine:data-load

这样就可以在数据库的表中插入初始数据了。

OK!打完收功!!