分类归档 Zend Framework

通过清心醉

ZEND认识篇->为数据库里某个表里增加数据(未过滤及判断重复)

还是在上一篇的控制器内增加新的方法;

public function adduserAction() //添加用户
{
$user=$this->getRequest()->getParam(‘user’);
$password=$this->getRequest()->getParam(‘password’);
$adduser=array(
‘user’=>$user,
‘password’=>$password
); //为SQL的字段指定参数.
$userModel=new user();
$userModel->insert($adduser);
//将数组交给insert处理获取返回值,insert是进行写入操作.
$this->render(‘addok’);
}

因为包含有模板文件:

require_once APPLICATION_PATH.’/models/IndexModel.php’;

所以直接调用ZEND封装的Zend_Db_Table里面的方法.

更多的可以参考ZEND手册.

通过清心醉

ZEND认识篇->获取数据库里某个表里的所有数据

#测试使用ZEND框架读取MYSQL某表内的所有数据

#首先我们创建个数据库,名为qingxinzui
#然后创建user表,表内有3个字段
CREATE TABLE user(id int primary key auto_increment,name varchar(64)not null,password varchar(64)not null);
#创建自增ID(建议使用),名字,密码
然后我们配置下配置文件的MYSQL
/configs/application.ini
[mysql]
db.adapter=PDO_MYSQL
db.params.host=localhost
db.params.username=root
db.params.password=
db.params.dbname=qingxinzui

#[mysql] mysql节点开始
#db.adapter=选择PDO类型的MYSQL
#db.params.host 数据库地址
#db.params.username 用户名
#db.params.password 密码(为空即不填写)
#db.params.dbname 数据库名称

我们默认使用index控制器来操作.

既然是使用框架,那么模板也就必须有那么一个对index控制器进行数据动作的文件
models目录下创建个IndexModel.php文件
写入以下代码:
class user extends Zend_Db_Table
{
#类的名字对应user数据库的user表名
#可以使用对该表的所有操作(由于继承了Zend_DB_Table)
protected $_name=’user’; //关联的表名
//protected $_primary=’id’;
//主键为id,如果创建表的时候有设置id为主键,可以不写
}
require_once APPLICATION_PATH.’/models/IndexModel.php’;
#在index控制器内别忘记了包含模板文件

同时:
init()函数是调用该控制器时自动执行,为了以后我们能更方便的管理
我们可以新增一个控制器,命名为:DbmysqlController.php(记得在controllers目录下创建)

class DbmysqlController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
$url=constant(“APPLICATION_PATH”).DIRECTORY_SEPARATOR.’configs’.DIRECTORY_SEPARATOR.’application.ini’;
$dbconfig=new Zend_Config_Ini($url,”mysql”); //读取mysql开始的节点
$db=Zend_Db::factory($dbconfig->db);//
$db->query(‘SET NAMES UTF8’);
Zend_Db_Table::setDefaultAdapter($db);
}
}
#然后在index控制器里面包含进来,这样我们其他需要用到数据连接的控制器
#直接把DbmysqlController.php包含进来就可以了.
require_once ‘DbmysqlController.php’;
#同时修改下Index控制器继承的类为 DbmysqlController
class IndexController extends DbmysqlController
{
#DbmysqlController已经继承Zend_Controller_Action控制器的方法
public function indexAction()
{
$userModel=new user(); //模板文件里已经定义要操作的表名了.
$rs=$userModel->fetchall()->toArray(); //返回数组
/*
在这里可能会很奇怪,系统怎么会知道我们要操作哪个数据库呢
其实在DbmysqlController里,读取了配置文件,已经知道哪一个
然后我们在模板里设置了一个protected $_name=’user’; //关联的表名
所以直接提取的是当前表的所有数据
ZEND框架已经封装好了这些属性.
*/
$this->view->rs=$rs;
#给当前对象的view视图生成一个属性rs,参数为数据库返回的数组
$this->render(‘index’);
}
}
#到此为止,已经获取了数据名,表名及把每行记录返回到数组$rs里了.
#我们在index.phtml视图文件中显示出来.
<?php
foreach ($this->rs as $user)
{
echo $user[‘id’].$user[‘user’].$user[‘password’].”</br>”;
}
?>

#rs数组属性的变量名取为user
输出数组属性的id,user,password数值.

到此,一个简单的使用ZEND框架获取数据库某表内的数据就简单完成了.

#注layouts里面为布局文件,别把layout.phtml文件删除,否则将不能正常显示.

通过清心醉

ZEND框架设置字符编码

ZEND框架默认的字符集是GBK,这样在测试中文的时候就会显示乱码

菜单栏里设置下

编辑->设置编码

Edit->set encoding

修改为UTF-8就可以了.

但这样只是当前的页面为UTF-8,我们需要以后新增的文件全部为UTF-8格式.

窗口->首选项->常规->工作空间里面有个文本文件编码,缺省值是GBK,修改为UTF-8即可.

window->preference->General->workspace

通过清心醉

ZEND认识篇->MVC的执行结构及编写自己的一个简单控制器

首 先必须开启apache的riterule功能,具体的可以GOOGLE。

比如作者的测试环境,默认目录为C:\xampp\htdocs 做为ZEND框架的主目录(同时也为apache的WEB根目录)

创建好了ZEND框架并且复制了ZEND库文件到library.

由于访问的是htdocs目录,但这目录内并没有index.php等引导文件。我们自己新建一个index.php文件

写入以下代码:

<?php

Header(“Location: /public/index.php”); #实现跳转到public目录下的index.php

?>

上一篇作者已经说了如何的创建自己的ZEND框架环境。

现在我们要来实现一个自己的MVC的简单功能。(其实只是VC视图和控制器,简单开始嘛)

基本执行流程:

通过riterule机制,给予访问的页面转到index.php

#htodcs/public/index.php

index.php里执行了一些基本的初始化工作之后

实例化了一个$application = new Zend_Applicatio

在这里包含了配置文件APPLICATION_PATH . ‘/configs/application.ini’

$application调用bootstrap()->run();

跳转到了Bootstrap.php

然后交给控制器IndexController.php

执行了indexAction()函数 #默认被执行了

调用/viesw/scripts/index.phtml视图

控制器的命名方法及规法:

比如要新增一个控制器text

Controllers文件夹里增加一个textController.php 文件

#在这主意,控制器的命名为<名称>+<Controller>

然后我们来编写text控制器的方法:

<?php

#在这里必须继承Zend_Controller_Action,否则该类就会被认为只是一个普通的类而不是控制器

class textController extends Zend_Controller_Action

{

public function init(){

#默认自动调用方法   可以写一个MYSQL连接类继承  Zend_Controller_Action来实现MYSQL连接的初始化等工作。

}

public function loginAction() #后面的Action不可少。

{

#自己的登录函数

$this->render(“login”);

#找到当前text控制器视图=text里文件为login的文件

#说白点就是include””;只是不需要自己加后缀和路径

#具体render函数可以选择后按F3查看

}

}

?>

然后我们还要有个视图,用来显示登录成功。

views/scripts加个文件夹,取名为text#必须和控制器名相同

在这text文件夹里面就是专门放text+Controller这个控制器对应的视图

我们在/views/scripts/text目录下增加个login.phtml视图文件(视图文件可以为php.html等)

我们来增加内容:

<h1>登录成功</h1>

如果没配置根目录index.php跳转,可以使用

127.0.0.1:88/public/text/login方式来访问。是可以正确的打开的。

这样,一个属于我们自己的简单控制器就起来了。

通过清心醉

ZEND开山篇->创建一个ZEND框架

作者以Zend Studio 10.6.2版本为例

文件->新建->示例

1

2

完成之后,在E:\XAMPP\HTDOCS\会多一个ZEND的目录(根据自己的情况而定项目路径)

左边会出现项目所有文件

3

然后我们把ZEND库文件放进来.

直接把ZendFramework\library\zend目录拷贝到

当前ZEND框架项目里的library

如作者的目录是在E:\xampp\htdocs\zend\library

 

4

 

这时候如果我们直接访问127.0.0.7/zend

注:因为zend是在htdocs目录下,本机的APACHE主目录为htdocs

5

因为在目录内没有index.php文件,所以是没有经过控制器等跳转.

好了,到此一个简单的ZEND框架就基本上算构建成功了.

由于版本不同,为了能适应不同版本的Zend Studio

也可以执行命令来创建 #注: 需要添加PHP到环境变量

不懂的可以参考

Windows添加php环境变量

Linux添加php环境变量

当然大家不同的php目录,根据自己的来做小修改即可.

命令 进入ZendFramework\bin目录

执行:

zf.bat create project E:/xampp/htdocs/zend

用命令创建一个zend项目,由于作者使用的仍是1.12版本,ZEND现在已经出了2.x的版本了,建议下载新版来使用.