QeePHP框架学习

QeePHP框架学习第一部分 从 GitHub 上下载 QeePHP 框架并导入 ZendStudio 学习 1 首先通过 QeePHP 官网 http qee13 com app index php action download 到指定的 GitHub 上下载 QeePHP 压缩包 2 解压之后复制 app 文件夹下的所有

第一部分:从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文件中需要改动的位置如下图所示:

172605_H3Sn_1054307.png

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

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

172834_0loB_1054307.png

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

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

173051_SCYj_1054307.png

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

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

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

173552_3ZrJ_1054307.png

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:


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文件:


_extends(‘_layouts/default_layout’); ?>


_block(‘title’);?>学生管理
_endblock();?>


_block(‘contents’);?>

 

浏览学生信息

 

 

     

   

   

   

   

 

 

             

           

               

   

   

   

   

   

   

             

       

 

编号 姓名 性别 年龄 操作
id?> name?> sex?> age?>

               

 


_endblock();?>


add.php文件:


_extends(‘_layouts/default_layout’); ?>


_block(‘title’);?>添加学生信息
_endblock();?>


_block(‘contents’);?>

 

 

 

 

 

 

 

 

添加学生信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


_endblock();?>

edit.php文件:


_extends(‘_layouts/default_layout’); ?>


_block(‘title’);?>

   


_endblock();?>


_block(‘head’);?>

   


_endblock();?>


_block(‘contents’);?>

 

修改学生信息

 

 

   

 

 

   

 

 

   

 

 

 

 

 


_endblock();?>

(3)student.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/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216800.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:02
下一篇 2026年3月18日 上午11:02


相关推荐

  • 浅谈Console.WriteLine();「建议收藏」

    今日看《老粱故事汇》,介绍日本已逝巨星高仓健,才初步对此人有所了解。老高一生演绎了许多经典的影幕形象,男主角都收获了真挚的爱情……可现实生活中,真实的老高,却一辈子只经历过一次婚姻,在离婚后终究不能从失败的婚姻中走出,最终孤老一生……所以,看事物,看人,不能光看表面,要有一双发现的眼睛,看到他的本质……   借此机会,讲一个C#中用于输出的最常见不过的语句的一个注意事项……谈到Cons

    2022年4月17日
    67
  • xp显示rpc服务器不可用,XP系统如何解决RPC服务器不可用?

    xp显示rpc服务器不可用,XP系统如何解决RPC服务器不可用?使用打印机或其他操作安装计算机时 它会提示 RPC 服务器不可用 很多人都会遇到这个问题 许多朋友可能不了解 RPC 他们不知道如何解决它 当用户在 WinXP 系统计算机上运行时 RPC 服务器不可用该怎么办 让我们来看看 WinXP 系统 RPC 服务器不可用的解决方案 教程 方法 1 RPC 是英语远程过程调用协议的缩写 中文定义是远程过程调用协议 它是一种通过网络从远程计算机程序请求服务而不了解底层网络技术的

    2026年3月17日
    1
  • C++虚函数表剖析

    C++虚函数表剖析关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包

    2022年7月13日
    37
  • 速递丨百度月底或推出新一代推理模型,将在数月内上新「文心大模型5.0」

    速递丨百度月底或推出新一代推理模型,将在数月内上新「文心大模型5.0」

    2026年3月12日
    2
  • PCIe TPH (TLP Processing Hints) 介绍

    PCIe TPH (TLP Processing Hints) 介绍1 TPH 基本介绍 TLPProcessin 直译过来是事务处理提示 英文简写为 TPH TPH 最初由 PCIe2 1 引入 是请求事务 TLP 头标中的一个可选配的特性 适用于存储器读 存储器写及原子操作事务 TPH 携带有请求者对完成者目标存储空间数据的使用信息 通知完成者即将访问数据的特性 完成者可以根据 TPH 合理地安排数据缓存及管理数据 从而降低 PCIe 设备的访问时延 降低系统带宽压力 提高 cache 的利用率 降低能耗 在发送带有 TPH 的 TLP 时 用到了 TLP 头标中的 TH

    2026年3月19日
    3
  • 简述springboot自动配置_如何配制溶液

    简述springboot自动配置_如何配制溶液阅读收获:+1|type_1_2:理解SpringBoot自动配置原理SpringBoot是什么SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。SpringBoot的特点 提供了固定的配置来简化配置…

    2022年8月21日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号