我们的第一个Symfory工程

现在我们试验一下Symfony。我们要在一个小时内构建一个全功能的网络程序。一个书店销售程序?可以!一个Weblog!这是一个好主意。让我们开始吧。

安装Symfony并且初始化工程

为了方便,我们将会使用Symfony沙盒。这是一个空的Symfony工程,在其中已经包含了所有所需要的库,并且完成了基本的配置。比起其他类型的安装,沙盒的最大优点就是我们可以立刻试验Symfony。

下载sf_sandbox.tgz,并且将其解压到我们的网络目录的根目录下。我们可以查看其中的readme文件,从而得以更为详细的信息。生成的文件结构如下所示:
www/
  sf_sandbox/
    apps/
      frontend/
    batch/
    cache/
    config/
    data/
      sql/
    doc/
    lib/
      model/
    log/
    plugins/
    test/
    web/
      css/
      images/
      js/

从这里我们可以看出sf_sandbox工程包含一个前端程序。我们可以通过请求下面的URL来测试沙盒:
http://localhost/sf_sandbox/web/index.php/

我们应会看到一个祝贺页面。

我们也可以将symfony安装一个定制的目录中,并且使用一个虚拟主机或是一个Alias设置我们的网络服务器。

初始化数据模型

所以Weblog应可以处理文章发布,并且我们可以进行评论。在sf_sandbox/config下创建一个schema.yml文件,并且将下面的数据模型粘贴到其中:
propel:
  weblog_post:
    _attributes: { phpName: Post }
    id:
    title:       varchar(255)
    excerpt:     longvarchar
    body:        longvarchar
    created_at:
  weblog_comment:
    _attributes: { phpName: Comment }
    id:
    post_id:
    author:      varchar(255)
    email:       varchar(255)
    body:        longvarchar
    created_at:

这个配置文件使用YAML语法。这是一个非常简单的语言,可以通过缩进来描述类XML的树结构。而且,他具有比XML更快的读写速度。唯一的问题就是缩进是具有意义的,而且不允许使用Tab,所以记住要使用空格来进行缩进。我们将会在配置一章中了解更多的YAML以及symfony配置的内容。

这个概要描述了weblog所需要的两个表的结构。Post与Comment是要创建的相关类的名字。保存这个文件,打开一个命令行,进行sf_sandbox目录,并且执行下面的命令:
$ php symfony propel-build-model

注意:要保证我们在调用symfony命令时在我们工程的根目录下。

在sf_sandbox/lib/model/目录下创建了一些类。这些是对象相关映射的类,这允许我们在面向对象的代码中而不使用单一的SQL查询来访问相关的数据库。为了这个目的,Symfony使用Propel库。我们将这些对象称之为模型(model)。

现在我们执行下面的命令:
$ php symfony propel-build-sql

这会在sf_sandbox/data/sql/目录下创建一个lib.model.schema.sql文件。这个SQL查询可以用来使用相同的表结构来初始化一个数据库。我们可以使用命令行或是Web界面在MySQL中创建一个数据库。幸运的是symfony沙盒的配置使用一个简单的SQLite文件来进行工作,所以不需要数据库的初始化工作。默认情况下,sf_sandbox工程会使用sf_sandbox/data/目录中的sandbox.db进行工作。要构建基于SQL文件的表结构,可以输入下面的命令:
$ php symfony propel-insert-sql

注意:如果此时有警告并不用担心。insert-sql命令在添加我们的lib.model.schema.sql数据表之前会移除已存在的数据表,而在此时并没有需要移除的数据表。

(注:此时如果我们需要连接的是MySQL数据的话,我们做如下的一些修改:
1 修改config/databases.yml,其param:下的参数部分分别为:
phptype:指明我们要使用的数据库类型
hostspec:指明我们所要用的数据库所在的域名
database:指明我们要使用的数据库的名字
username:指明我们连接数据库所用的用户名
password:指明我们连接数据库所用的密码

2 修改config/propel.ini,所需要修改的部分如下:
propel.database:指明我们需要使用的数据库类型
propel.database.createUrl:我们需要使用的数据库所在的主机地址,其格式为mysql://username:password@domain/,其各部分分别为用户名,密码以及域名
propel.database.url:我们需要使用的数据库的地址,其格式为:mysql://username:password@domain/database,其各部分分别为用户名,密码,密码以及数据库的名字
)

创建程序框架

一个Blog的基本特征是可以创建,获取,更新以及删除发表及评论。因为我们是初次接触Symfony,所以我们不会从头开始创建Symfony代码,而是让Symfony创建一个我们可以使用并且在需要时可以修改的程序框架。Symfony可以解释数据模型来自动创建CRUD接口。

$ php symfony propel-generate-crud frontend post Post
$ php symfony propel-generate-crud frontend comment Comment
$ php symfony clear-cache

On *nix systems, you will have to change some rights:
$ chmod 777 data
$ chmod 777 data/sandbox.db

现在我们就拥有了两个可以用来处理Post与Comment类的模型(post,comment)。一个模型(module)通常代表一个页面或是具有相似目的的一组页面。我们的新模型位于sf_sandbox/apps/frontedn/modules/目录下,而他们可以通过下面的URL来进行访问:

http://localhost/sf_sandbox/web/frontend_dev.php/post
http://localhost/sf_sandbox/web/frontend_dev.php/comment

此时我们可以进行一些简单的测试。

修改布局

为了在两个新模型之间进行切换,weblog需要一些全局的浏览设置。

编辑全局模板sf_sandbox/apps/frontend/templates/layout.php,修改body内容如下:

<div >结论

好了,现在我们学习的时间已经到了。我们完成了我们的练习。现在我们可以在生产环境下使用这些程序。
frontend:   http://localhost/sf_sandbox/web/index.php/
backend:    http://localhost/sf_sandbox/web/backend.php/

此时,如果我们遇到错误,也许是因为我们在cacahe中放了一些动作后改变了模块造成的(在开发环境下,cacahe并没有激活)。要清除cacahe,我们可以简单的输入下面的命令:
$ php symfony cc

 

相关文章: