rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » PHP

Zend Framework 快速开始(3)

创建模 型和数据表

在我们开始之前,让我们 来思考几点:这些类将放在什么地方,我们如何找到它们?我们创建的默认的项目实例化一个自动加载(autoloader)。 我们可以给它附加其他的自动加载(autoloader),所以它知道在哪里可以找到不同的类。典 型的,我们想让我们各种各样的MVC类归入同一个目录树――在这个例子中是application/ ――并且大多数经 常使用共同的前缀(common prefix)。

Zend_Controller_Front 有一个“模块(modules)”概念,它是一个单独的小应 用程序。模块模拟在application/目录下用zf工 具建立的目录结构,且里面所有的类假定有相同的前缀――模块名。“Application/”本身 就是一个模块――“default”或者“application” 模块。因此,我们将去设置在此目录下资源的自动导入。

Zend_Application_Module_Autoloader提供将模块下各种资源映射到相应目录的功能,并且也提供一个标准 的命名机制。在引导对象(bootstrap object)初始化时,这个类的实例被默认创建。 你的应用程序引导程序(bootstrap)将默认的使用“Application” 作为模块前缀。这样,我们的模型、表单和数据表类将以“Applicatin_”为前缀。

Now, let's consider what makes up a guestbook. Typically, they are simply a list of entries with a comment, timestamp, and, often, email address. Assuming we store them in a database, we may also want a unique identifier for each entry. We'll likely want to be able to save an entry, fetch individual entries, and retrieve all entries. As such, a simple guestbook model API might look something like this:

现在,我们来看看是什么 组成了留言簿,典型的,他们简单的由评论(comment),戳(timestamp),经常还包括邮件地址的条目列表。假若将他们存储在数据库中,还要为每一个条目建立一个唯 一的标识符。我们想要保存条目、查询单个条目,检索所有条目。因此,一个简单的留言薄模型API可 能看起来像这样:

  • // application/models/Guestbook.php
  •  
  • class Application_Model_Guestbook
  • {
  •     protected $_comment;
  •     protected $_created;
  •     protected $_email;
  •     protected $_id;
  •  
  •     public function __set($name, $value);
  •     public function __get($name);
  •  
  •     public function setComment($text);
  •     public function getComment();
  •  
  •     public function setEmail($email);
  •     public function getEmail();
  •  
  •     public function setCreated($ts);
  •     public function getCreated();
  •  
  •     public function setId($id);
  •     public function getId();
  • }
  •  
  • class Application_Model_GuestbookMapper
  • {
  •     public function save(Application_Model_Guestbook $guestbook);
  •     public function find($id);
  •     public function fetchAll();
  • }
  • __get()和__set()将提供一个提供了一个便捷的机制去访问单个条目属性,代理其他的getter和setter方法(proxy to the other getters and setters),他们也帮助确保对象中只有 白名单属性才是可用的

    Find()和fetchAll()提供获取单个条目和能力,而save()负责将条目存储到数据库。

    从现在开始,我们能够开 始建立我们的数据库

    首先我们需要初始化我们 的数据源。就像布局和视图资源那样,可以为数据源提供配置。我们可以使用“zf configure db-adapter”命令:

  • % zf configure db-adapter \
  • > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' \
  • > production
  • A db configuration for the production has been written to the application config file.
  •  
  • % zf configure db-adapter \
  • > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-testing.db"' \
  • > testing
  • A db configuration for the production has been written to the application config file.
  •  
  • % zf configure db-adapter \
  • > 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook-dev.db"' \
  • > development
  • A db configuration for the production has been written to the application config file.
  • 现在编辑你的application/configs/application.ini file文件,在相应的部分你将会看到下面的行被加进去。

  • ; application/configs/application.ini
  •  
  • [production]
  • ; ...
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
  •  
  • [testing : production]
  • ; ...
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
  •  
  • [development : production]
  • ; ...
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
  • 最后的配置文件看起来像 这样:

  • ; application/configs/application.ini
  •  
  • [production]
  • phpSettings.display_startup_errors = 0
  • phpSettings.display_errors = 0
  • bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  • bootstrap.class = "Bootstrap"
  • appnamespace = "Application"
  • resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  • resources.frontController.params.displayExceptions = 0
  • resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  • resources.view[] =
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook.db"
  •  
  • [staging : production]
  •  
  • [testing : production]
  • phpSettings.display_startup_errors = 1
  • phpSettings.display_errors = 1
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-testing.db"
  •  
  • [development : production]
  • phpSettings.display_startup_errors = 1
  • phpSettings.display_errors = 1
  • resources.db.adapter = "PDO_SQLITE"
  • resources.db.params.dbname = APPLICATION_PATH "/../data/db/guestbook-dev.db"
  • 注意数据库将被存储在“data/db/”目录下。创建这些目录并且使它们是可写的。在类unix系 统中,你可以像下面这么做:

  • % mkdir -p data/db; chmod -R a+rwX data
  • 在wendows系统中,你需要在资源管理器中创建目录并设置对任何人的写权限。

    这里我们有一个到数据库 的连接,它连接到位于application/data/目录下的sqlite数据库。我们来设计一个简单的数据表用于存储我们的留言板条目。

  • -- scripts/schema.sqlite.sql
  • --
  • -- You will need load your database schema with this SQL.
  •  
  • CREATE TABLE guestbook (
  •     id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  •     email VARCHAR(32) NOT NULL DEFAULT 'noemail@test.com',
  •     comment TEXT NULL,
  •     created DATETIME NOT NULL
  • );
  •  
  • CREATE INDEX "id" ON "guestbook" ("id");
  • 为使我们的工作有创意的 (so that we can have some working data out of the box), 我们来创建一些数据行使我们的应用程序更加有趣

  • -- scripts/data.sqlite.sql
  • --
  • -- You can begin populating the database with the following SQL statements.
  •  
  • INSERT INTO guestbook (email, comment, created) VALUES
  •     ('ralph.schindler@zend.com',
  •     'Hello! Hope you enjoy this sample zf application!',
  •     DATETIME('NOW'));
  • INSERT INTO guestbook (email, comment, created) VALUES
  •     ('foo@bar.com',
  •     'Baz baz baz, baz baz Baz baz baz - baz baz baz.',
  •     DATETIME('NOW'));
  • 顶一下
    (0)
    踩一下
    (0)