zend 学习笔记二

好吧,连接数据库了。
model 是处理application应用的业务规则核心部分(“business rule”)
即来处理业务逻辑,产品功能需求滴。
用来封装数据库的表(存储级)


使用Zend Framework 的 Zend_Db_Table类来查找/插入/更新或删除数据库中的行。


1,配置数据库
数据库配置文件application/configs/application.ini
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = mysqlpassword
resources.db.params.dbname = zendframeworktutorial


关于 Zend_Db_Table 和 Zend_Db_Table_Abstract
http://framework.zend.com/manual/en/learning.quickstart.create-model.html
Zend_Db_Table_Row


Zend_Db_Table_Abstract 是一个抽象类


自动加载器,就是分析名字,分析出资源类跳到什么目录中。如下
前缀     --》 目录
Form     --》forms
Model    --》models
Model_DbTable --》models/DbTable
Model_Mapper  --》models/mappers
Plugin      --》plugins
Service     --》services
View_Filter --》views/filters
View_Helper --》views/helpers
主文件夹application/ 使用Application_前缀。


因为我们是根据数据库表命名albums,并使用Zend_Db_Table的,我们的类将会以 Application_Model_DbTable_Albums 命名,保存在applications/models/DbTable/Albums.php 文件中。


东西不复杂,怎么讲的那么晕呢,花了十几分钟才看明白。晕死


为了告诉 Zend_Db_Table 要管理哪个表,我们要为表名称设定protected 属性 $_name。同样,Zend_Db_Table 会认为数据库表有一个名为id自动递增的主键,这个field的名称如果有需要也可以更改。使用zf命令行工具:(经验说:还是不改的好。传统要保留,哈)


zf create db-table Albums albums
文件 applications/models/DbTable/Albums.php 将会被创建,在这个文件中有一个名为 Application_Model_DbTable_Albums 的类,并设定了和这个类交互的数据库表的名称。


我们添加 getAlbum(), addAlbum(), updateAlbum() 和 deleteAlbum() 这几个方法如下:到Albums.php 中。


<?php
class Application_Model_DbTable_Albums extends Zend_Db_Table_Abstract {
protected $_name = 'albums';


public function getAlbum($id) {
$id = (int)$id;
$row = $this->fetchRow('id = ' . $id);
if (!$row) {
throw new Exception("Could not find row $id");
}
return $row->toArray();
}

public function addAlbum($artist, $title) {
$data = array(
'artist' => $artist,
'title' => $title,
);
$this->insert($data);
}


public function updateAlbum($id, $artist, $title) {
$data = array(
'artist' => $artist,
'title' => $title,
);
$this->update($data, 'id = '. (int)$id);
}


public function deleteAlbum($id) {
$this->delete('id =' . (int)$id);
}
}
上面我们创建了4个用于和数据库表交互的helper 方法。


下面我们要在controllers 中填入models 中的数据,以及编写view 脚本代码显示它。
---------------------------------------------------


Zend Framework 的view 组件是Zend_View。这个view 组件的功能是将action函数中的代码和显示页面的代码分开写。


Zend_View 的基本使用方法是:


$view = new Zend_View();
$view->setScriptPath('/path/to/scripts');
echo $view->render('script.php');


对于渲染过程,首先 ViewRenderer 创建 Zend_View 对象,该对象会在 views/scripts/{controller name} 目录中查找和 action 名字相同,后缀为.phtml 待渲染的的view 脚本。也就是查找渲染的view 脚本为 views/scripts/{controller name}/{action_name}.phtml,要呈现的内容被添加到Response 对象的body中。
(即,把控制器的数据,通过那个目录下的模板,渲染出来。显示到网页上。)


页面上重复的header 部分和footer部分,甚至sidebar边栏等。这是一个很常见的问题,Zend 框架使用 Zend_Layout 解决这个问题。


布局文件默认放在application/layouts/ 目录,不过 Zend_Application 允许我们配置Zend_Layout这个资源。我们使用Zend_Tool 创建布局视图代码,它同时还知道如何正确地更新 application.ini 文件。在zftest 目录中我们执行下面的命令:


zf enable layout


现在Zend_Tool 已经创建了 application/layouts/scripts 文件夹,并在里面创建了一个layout.phtml 文件,同样也更新了application.ini文件,注意到是在[production]部分添加了一行:


resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"


打开layouts.phtml 文件用下面的代码替换:


zf-tutorial/application/layouts/scripts/layout.phtml
<?php
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
$this->headTitle()->setSeparator(' - ');
$this->headTitle('Zend Framework Tutorial');
echo $this->doctype(); ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
</head>
<body>
<div id="content">
<h1><?php echo $this->escape($this->title); ?></h1>
<?php echo $this->layout()->content; ?>
</div>
</body>
</html>


$this变量,它是在bootstrapping过程中创建的view 对象的一个实例。


zf-tutorial/application/layouts/scripts/layout.phtml
...
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/site.css'); ?>
</head>


然后我们在public/目录下创建css 目录,里面创建 site.css文件:


因为我们已经创建并设置了布局文件,现在就可以清空 application/views/scripts/index目录中zf 自动创建的4个view 文件中的默认代码了(index.phtml, add.phtml, edit.phtml 和 delete.phtml),开始编写自己的view 视图代码。


---------------------------------
CSS 样式完成了。

你可能感兴趣的:(zend 学习笔记二)