QeePHP框架学习

第一部分:从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:

<?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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值