第一部分:从GitHub上下载QeePHP框架并导入Zend Studio学习

(1)首先通过QeePHP官网http://qee13.com/app/index.php?action=download,到指定的GitHub上下载QeePHP压缩包。

(2)解压之后复制app文件夹下的所有文件及整个library文件夹到新建的本地PHP项目中。

(4)可能此时你的项目会显示出错信息,改变Zend Studio开发环境中Workspace下的编码方式为utf-8

(5)修改QeePHP框架配置信息

第一步:修改library库文件的路径,在index.php文件中需要改动的位置如下图所示:

第二步:配置载入的library库文件夹的信息,右键单击项目,选择Include Path,指定library文件的信息,

如下图:library文件位置没指定,可以通过点击Add External Source Folder设置!

第二部分:使用QeePHP框架开发的步骤

一、首先在你的PHP项目路径/_code/_config/database.config.php下配置数据库文件信息

二、在MySQL中建一个数据库todo_db,注意修改数据库的编码方式为utf8-general-ci。再新建一个表,假设为students,

三、建立与数据库表对应的模型

在项目中的model文件夹下,对应表students新建一个视图模型类student,该model类位于student.php文件中

model类Student写法如下:

(创建与数据库表对应的模型可以采用自动化的工具,工具的地址:http://www.qee13.com)

四、创建控制器:

在项目中的controller下,新建一个Students控制器,注意控制器文件名为students.php,与数据表对应,另外注意Students控制器的类的命名规则,Controller_Students,控制器类体中是与view视图中对应的各个动作,如下图中的默认的动作index(当视图未指定执行Students控制器中的哪一个动作时,默认执行index动作!),添加数据动作add;删除数据动作delete;更新动作update等等。注意当index默认动作中的内容为空时,系统不会处理任何数据,此时如果不执行跳转的话,页面会回到与动作方法名对应的视图页面!

五、创建视图:

注意视图与动作是一 一对应的,例如,我们在students试图文件夹下创建一个默认的index.php视图页面,该页面对应控制器

中的index动作(当控制器中的该动作内容为空时,会默认执行index.php页面!当然,也可以在该动作方法中对跳转页面进行指定或者是对接收过来的参数进行处理!

六、关于model、controller、view三者之间在QeePHP框架中的具体调用关系说明:

(1)model首先需要与表建立对应关系;

(2)controller建立好之后直接运行,系统会自动给你建立好对应的view视图(此时的视图布局会采用系统默认的方式创建,当然你也可以自己修改!);

(3)首先用户在页面向controller发出请求调用,在一个controller中,一般会有多个action动作,系统通过action属性值确定执行哪一个动作!在controller中,一般会通过new一个具体的model实例的形式,来获取与model对应的表中各个属性字段,从而直接完成对表的操作!当然,这些操作方法可以直接使用框架中内置的方法,从而简化操作!

七、运用QeePHP框架内置的函数进行基本的增、删、改、查操作:(怎样理解各个文件中的传递关系?)

(1)以Students表对应的Student模型为例,以下是控制器文件students.php:

<?php

class Controller_Students extends Controller_Abstract

{

function actionIndex()

{

$students = Student::find()->getAll();

$this->_viewname = 'index';

$this->_view['students'] = $students;

}

function actionAdd()

{

$student = new Student();

if (request_is_post()) {

$student = new Student(array(

'name' => request('name'),

'sex' => request('sex'),

'age' => request('age')

));

$student->save();

return $this->_redirect(url('students/index'));

}

$this->_viewname = 'add';

$this->_view['student'] = $student;

}

function actionEdit()

{

$student = Student::find('id=?', request('id'))->getOne();

if ($student->isNewRecord()) {

return $this->_redirectMessage('对不起', '该学生信息不存在或已被删除', url('students/index'));

}

if (request_is_post()) {

$student->changeProps($_POST);

$student->save();

return $this->_redirect(url('students/index'));

}

$this->_view['student'] = $student;

}

function actionDelete()

{

$student = Student::find('id=?', request('id'))->getOne();

$student->destroy();

return $this->_redirect(url('students/index'));

//return $this->_redirectMessage('删除成功', url('students/index'));

}

}

(2)student视图文件夹中包含三个文件index.php,edit.php,add.php:

index.php文件:

<?PHP $this->_extends('_layouts/default_layout'); ?>

<?PHP $this->_block('title');?>学生管理<?PHP $this->_endblock();?>

<?PHP $this->_block('contents');?>

<form action="" method="post">

<fieldset>

<legend>浏览学生信息</legend>

<table style="width: 500px;" border="1">

<tr>

<th>编号</th>

<th>姓名</th>

<th>性别</th>

<th>年龄</th>

<th>操作</th>

</tr>

<tbody>

<?php foreach ($students as $student):?>

<tr>

<td align="center"><?php echo $student->id?></td>

<td align="center"><?php echo $student->name?></td>

<td align="center"><?php echo $student->sex?></td>

<td align="center"><?php echo $student->age?></td>

<td align="center">

<input type="hidden" name="id" value="<?php echo $student->id()?>">

<a href="<?php echo url('students/edit',array('id' => $student->id()))?>">修改</a>|

<a href="<?php echo url('students/delete',array('id' => $student->id())) ?>">删除</a>

</td>

</tr>

<?php endforeach;?>

</tbody>

</table>

<a href="<?php echo url('students/add')?>">增加学生</a>

</fieldset>

</form>

<?PHP $this->_endblock();?>

add.php文件:

<?PHP $this->_extends('_layouts/default_layout'); ?>

<?PHP $this->_block('title');?>添加学生信息<?PHP $this->_endblock();?>

<?PHP $this->_block('contents');?>

<div>

<form action="" method="post">

<?php if (!empty($errors)):?>

<div class="alert">

<?php echo $errors?>

</div>

<?php endif;?>

<fieldset>

<legend>添加学生信息</legend>

<p>

<label>姓名</label>

<input name="name">

</p>

<p>

<label>性别</label>

<input name="sex"/>

</p>

<p>

<label>年龄</label>

<input name="age"/>

</p>

<p>

<input type="submit" value="提交">

</p>

</fieldset>

</form>

</div>

<?PHP $this->_endblock();?>

edit.php文件:

<?PHP $this->_extends('_layouts/default_layout'); ?>

<?PHP $this->_block('title');?>

<?php 修改学生信息 ?>

<?PHP $this->_endblock();?>

<?PHP $this->_block('head');?>

<?php //head 部分 ?>

<?PHP $this->_endblock();?>

<?PHP $this->_block('contents');?>

<form action="" method="post">

<fieldset>

<legend>修改学生信息 </legend>

<p>

<label>姓名</label>

<input name="name" value="<?php echo $student->name?>" >

</p>

<p>

<label>性别</label>

<input name="sex" value="<?php echo $student->sex?>" />

</p>

<p>

<label>年龄</label>

<input name="age" value="<?php echo $student->age?>"/>

</p>

<p>

<input type="submit" value="修改" >

</p>

</fieldset>

</form>

<?PHP $this->_endblock();?>

(3)student.php模型文件:

该文件中需要书写的内容比较少,可以通过框架自带的模型生成工具来创建:

<?php

/**

* Student 封装来自 students 数据表的记录及领域逻辑

*/

class Student extends QDB_ActiveRecord_Abstract

{

/**

* 返回对象的定义

*

* @static

*

* @return array

*/

static function __define()

{

return array

(

// 用什么数据表保存对象

'table_name' => 'students',

// 指定数据表记录字段与对象属性之间的映射关系

// 没有在此处指定的属性,QeePHP 会自动设置将属性映射为对象的可读写属性

'props' => array

(

'id' => array('readonly' => true),

),

'validations' => array

(

),

'create_autofill' => array

(

//自动填充修改和创建时间

'created'=>self::AUTOFILL_TIMESTAMP,

'updated'=>self::AUTOFILL_TIMESTAMP

),

'update_autofill'=>array(

'updated'=>self::AUTOFILL_TIMESTAMP

),

// 不允许通过构造函数给 id 属性赋值

'attr_protected' => 'id',

);

}

/**

* 开启一个查询,查找符合条件的对象或对象集合

*

* @static

*

* @return QDB_Select

*/

static function find()

{

$args = func_get_args();

return QDB_ActiveRecord_Meta::instance(__CLASS__)->findByArgs($args);

}

/**

* 返回当前 ActiveRecord 类的元数据对象

*

* @static

*

* @return QDB_ActiveRecord_Meta

*/

static function meta()

{

return QDB_ActiveRecord_Meta::instance(__CLASS__);

}

/* ------------------ 以上是自动生成的代码,不能修改 ------------------ */

}

class StudentException extends QException{}

转载于:https://my.oschina.net/zhouyang2021/blog/372829

QeePHP框架学习相关推荐

  1. QeePHP框架学习笔记(自定义SQL执行)

    今天做了一个从老数据库里面有用的数据导入到新的数据库里面时,想到了用Qeephp框架来做,先把老数据库里面的有用的东西查询出来,再把在老数据库里面查询到的数据添加到新的数据库里面,这个思路有了,于是就 ...

  2. jQuery框架学习第二天:jQuery中万能的选择器

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

  3. ssm框架requestmapping找不到_框架学习,就是介么简单

    框架学习 程序员凯小白 最近实训ssm框架,SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大 ...

  4. rose框架学习总结

    rose框架学习总结 rose框架为paoding rose框架 具体可见https://code.google.com/p/paoding-rose/ 1   对rose框架的整体认识 1.1B/S ...

  5. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  6. jQuery框架学习第一天:开始认识jQuery

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

  7. Android接口和框架学习

    Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer,硬件抽象层 CTS:CompatibilityTest Suite,兼容性测试套件 Android让你 ...

  8. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  9. SpringMVC框架--学习笔记(下)

    接上篇:SpirngMVC框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81038382 17.全局异常处理: 系统中异常包 ...

最新文章

  1. 干货回顾丨机器学习笔记-----AP(affinity propagat)算法讲解及matlab实现
  2. MspEmu W.I.P
  3. 三, for循环----文件对象-----函数基础------模块基础
  4. C#三层结构(4)——扩展-加密字符窜源代码
  5. python中matplotlib画图_Python-matplotlib画图(莫烦笔记)
  6. Android笔记 杀死进程demo
  7. AndroidStudio断点调试
  8. Pandas 表连接(Merge,join,concatenate)
  9. bzoj3144 [Hnoi2013]切糕
  10. install 命令用法详解
  11. POJ2536 Gopher II【二分图最大匹配】
  12. 五分钟教会如何计算CAN总线负载率,包学包会
  13. 深度教练:让深度学习模拟人类教学过程,大幅减少训练数据和时间
  14. 模拟赛 Jams倒酒
  15. 9-17每日一题:Leetcode36. 有效的数独
  16. 程序员的进化,Python程序员是最大的亮点
  17. 架构师更多的是和人打交道,说说我见到和听说到的架构师升级步骤和平时的工作内容
  18. 网页设计之字体设置(上)
  19. App基本框架搭建丨日志管理 - KLog
  20. 基于金融行业的软件测试分析

热门文章

  1. Parallel Tool In Linux安装
  2. oracle登录tns串区别,tns 连接问题
  3. Android自定义View-滑动解锁按钮
  4. 【计算机科学】mini-AORCNN:一种基于Bottleneck Transformer的轻量级微表情识别架构——CCF T2
  5. 后齐达内时代怀念10大前腰
  6. matlab中的sum函数的用法
  7. VS 2017 添加 ReportViewer
  8. C语言函数实现质因数分解
  9. JCE(icecream用英语怎么说)
  10. Complement Pathway