后盾HDphp框架笔记总结

目录:
一、框架介绍
简介
理解
地址
git地址
手册地址
离线手册
二、框架使用总结
1.入口文件
2.跳转路径
3.设置配置文件Config.php
4.public公共文件目录
5.Controller控制器文件获取分配数据
6.Model模型
7.公共控制器
8.数据查询的几种
9.路由配置
10.ajax响应
11.success和error
12.模板引擎
13.分页
14.验证码
15.QQ登录
16.自动完成
17.自动验证
三、git命令


一、框架的介绍
简介:
后盾 HDPHP 框架是一个为用 PHP 程序语言编写网络应用程序的人员提供的软件包。 提供强大的、完整的类库包,满足开发中的项目需求,HDPHP 框架可以将需要完成的任务代码量最小化,大大提高项目开发效率与质量,当然使用是非常简便、快捷的。高效的核心编译处理机制让系统运行更快,提供丰富的的错误解决方案,让修正代码变得更快速。

理解:
1.框架是一个庞大的代码集合,拥有不同的类进行数据处理。
2.框架是开发者的工具,他能够开发出不同的系统

地址:
git:http://git.oschina.net/houdunwang/hdphp
手册:http://houdunwang.github.io/doc/hdphp/index.html
离线手册:
HdphpHdcmsHdjs2014.12.chm

二、Hd框架使用总结

1.入口文件
./index.php

<?php
//调试模式
define('DEBUG', true);

//定义入口文件
define('APP_PATH','App');

//引入框架
require 'Hdphp/Hdphp.php';
?>

载入后生成:
./App -- 项目文件
./App/Home/View/Index/index.php -- 项目模板目录
./App/Common/Model -- 项目模型目录
./App/Home/Controller -- 前台Home控制器目录

2.跳转路径
./admin.php

<?php 

//跳转到用户
header('Location:index.php?m=Admin');

 ?>

3.设置配置文件Config
文件位置:Config/database.php
<?php
return array(
    #读服务器
    'read'=>array(
    ),
    #写服务器
    'write'=>array(
    ),
    'host'              =>'127.0.0.1',   //主机
    'driver'            => 'mysql',     //数据库类型
    'charset'           => 'utf8',      //数据库字符集
    'user'              => 'root',      //数据库用户名
    'password'          => '',          //数据库密码
    'database'          => 'blog_edu',          //数据库名称
    'prefix'            => '',          //表前缀
);
注:主机在服务器上使用地址不适用ip

4.Public公共文件目录
目录主要放置公共样式与js等

5.Controller控制器文件获取分配数据

列子:前台控制器
<?php namespace Home\Controller; 
use Hdphp\Controller\Controller;
//前台默认控制器
class IndexController extends Controller{

    //前台首页
    public function index(){

        //首页最新3篇文章
        $arcModel = new \Common\Model\Arc;
        $arcData = $arcModel->join('category','category_cid','=','cid')->orderBy('sendtime','DESC')->limit(3)->get();
        //实例中间表模型
        $arcTagModel = new \Common\Model\ArcTag;
        foreach ($arcData as $k => $v) {
            //获得每篇文章的标签,然后压入数组
            //中间表和标签表关联
            $data = $arcTagModel->join('tag','tag_tid','=','tid')->where("article_aid={$v['aid']}")->field('tid,tname')->get();
            $arcData[$k]['tag'] = $data;
        }
        View::with('arcData',$arcData);

            View::make();
    }


//    public function code(){
//       Code::num(C('webset.code_len'))->fontColor(C('webset.code_color'))->make();
//    }

}

6.Model模型
存放位置: ./Common/Model
例子:Arc.php文件
<?php namespace Common\Model;
use Hdphp\Model\Model;
//文章管理模型
class Arc extends Model{
    //指定表名,固定写法
    protected $table = "article";
    //自动验证,固定写法
    protected $validate = array(
        array('title','required','文章标题不能为空',3,3),
        array('category_cid','required','分类必须选择',3,3)
    );
    //自动完成
    protected $auto = array(
        //查手册
        //3是必须处理的表单,1是在插入时候处理
         array('sendtime','time','function',3,1),
         array('updatetime','time','function',3,2),
         array('user_uid','userUid','method',3,1),
         //缩略图
         array('thumb','thumb','method',3,3)
    );

    public function thumb(){
        //如果有文件上传
        //如果是编辑的时候,只显示图片的时候,没有file类型的表单,所以是不存在$_FILES['thumb']
        if(isset($_FILES['thumb']) && $_FILES['thumb']['error'] != 4){
            //执行上传类
            $files = Upload::type('jpg,png,gif')->size(2000000)->make();
            //如果上传成功,返回对应的路径
            if($files){
                //处理缩略的文件名
                $newPath = str_replace('.' . $files[0]['ext'], '_thumb.' . $files[0]['ext'], $files[0]['path']);
                //缩略,返回缩略图的地址
                $thumbPath = Image::thumb($files[0]['path'],$newPath,200,200,2);
                //存到数据库
                return $thumbPath;
            }
        }
        //编辑的时候:如果有隐藏域($_POST['thumb'])的时候,那么就是返回旧地址
        if($thumb = Q('post.thumb')){
            return $thumb;
        }
        //如果用户没有上传,则返回空字符串存入数据
        return '';
    }

    //处理字段user_uid的方法,该方法返回什么,数据库就可以存入什么
    public function userUid(){
        return $_SESSION['uid'];
    }

    //添加文章
    public function store(){
        //一.触发两张表的自动验证
        //1.验证article
        if(!$this->create()) return false;
        //如果上传失败
        if($error = Upload::getError()){
            //给当前模型压入错误
            $this->error = $error;
            return false;
        }
        //2.验证article_data
        $arcDataModel = new \Common\Model\ArcData;
        if(!$arcDataModel->create()){
            //把arcData模型的错误,压到当前模型,
            //因为控制器显示的错误,就是当前模型的错误
            $this->error = $arcDataModel->getError();
            return false;
        }
        //二、添加数据
        //1.article文章表,返回文章的自增id
        $aid = $this->add();
        //2.articel_data文章数据表
        //给模型的data属性压入值,那么add添加的时候就可以添加到数据库
        $arcDataModel->data['article_aid'] = $aid;
        $arcDataModel->add();
        //3.article_tag文章标签中间表
        $arcTagModel = new \Common\Model\ArcTag;
        foreach (Q('post.tid',array()) as $tid) {
            $data = array(
                'tag_tid' => $tid,
                'article_aid' =>$aid
            );
            $arcTagModel->add($data);
        }

        return true;

    }

    public function edit(){
        //一.触发两张表的自动验证
        //1.验证article
        if(!$this->create()) return false;
        //如果上传失败
        if($error = Upload::getError()){
            //给当前模型压入错误
            $this->error = $error;
            return false;
        }
        //2.验证article_data
        $arcDataModel = new \Common\Model\ArcData;
        if(!$arcDataModel->create()){
            //把arcData模型的错误,压到当前模型,
            //因为控制器显示的错误,就是当前模型的错误
            $this->error = $arcDataModel->getError();
            return false;
        }
        //二、修改
        //1.article
        $this->save();
        //2.article_data
        //接收隐藏域的aid
        $aid = Q('post.aid',0,'intval');
        $arcDataModel->where("article_aid=$aid")->save();
        //3.article_tag
        //先删除
        $arcTagModel = new \Common\Model\ArcTag;
        $arcTagModel->where("article_aid={$aid}")->delete();
        //再添加
        foreach (Q('post.tid',array()) as $tid) {
            $data = array(
                'article_aid' => $aid,
                'tag_tid' => $tid
            );
            $arcTagModel->add($data);
        }
        return true;
    }

}

7.公共控制器

例子:CommonController.php文件代码
<?php namespace Admin\Controller;
use Hdphp\Controller\Controller;
//公共控制器
class CommonController extends Controller{
    //构造函数,是框架自定义的
    //不会覆盖父级的构造函数,
    public function __init(){
        $this->auth();
    }

    //验证是否登陆
    public function auth(){
        //判断用户是否登陆
        if(!isset($_SESSION['uid']) || !isset($_SESSION['username'])){
            //跳转到登陆页面,让用户登陆
            go(U('Login/index'));
        }
    }
}

使用方法继承控制器

class IndexController extends CommonController{
    
}

8.数据查询的几种

Db::table()方法
$userData=Db::table('user')->where('uid',1)->find();//查找这条数据,获取到二维数据。
注:不可以写入修改,查询方便

$model模型查询方法
$userModel=new /Common/Model/userModel.php
$userData=$userModel->where('uid',1)->find()//查找这条数据,获取到的是一维数据。
注:可写可修可查方便
查询方式:
first();获取第一个
pluck('username');获取单一字段
Db::table('user')->lists('username');获取所有的username单个数据

//满足条件记录的所有username字段
Array
(
    [0] => admin
    [1] => hdxj
)

返回一维数组,第一个字段做为键名使用,第 2 个字段做为键值

Db::table('user')->lists('id,username'); 

//id 字段做为键名使用
Array
(
    [1] => admin
    [2] => hdxj
)

多个字段返回二维数组,第一个字段值做为键名使用,其余字段做为键值

Db::table('user')->lists('id,username,age');

//返回值如下
Array
(
    [1] => Array
        (
            [id] => 1
            [username] => admin
            [age] => 22
        )

    [2] => Array
        (
            [id] => 2
            [username] => hdxj
            [age] => 67
        )

)

指定查询结果字段

Db::table('user')->field('username AS name','age')->get();

增加查询子句到现有的查询中

$db = Db::table('user')->field('username AS name','age','id');
$db->where('id','>',2)->get();

使用 where 及运算符

Db::table('user')->where('id','>',1)->get();
Db::table('user')->where('id','>',1)->where('id','>',10)->get();

预准备whereRaw

Db::table('user')->whereRaw('age > ? and username =?', [1,'admin'])->get();

使用orwhere

Db::table('user')->where('id','>',1)->orwhere('username','=','向军')->get();

使用 WhereBetween

Db::table('user')->whereBetween('id',[10,30])->get();

使用 WhereNotBetween

Db::table('user')->whereNotBetween('id',[10,30])->get();

使用 WhereIn

Db::table('user')->whereIn('id',[2,3,9])->get();

使用 WhereNotIn

Db::table('user')->whereNotIn('id',[3,5,6])->get();

使用 WhereNull

Db::table('user')->whereNull('id')->get();

使用 WhereNotNull

Db::table('user')->whereNotNull('id')->get();

自动条件设置

Db::table('user')->whereIdOrUsername('1','向军')->get();
Db::table('user')->whereIdAndAge('1',22)->get();
Db::table('user')->whereIdAndAgeOrUsername('1',22,'向军')->get();

指定条件关系

Db::table('user')->where('id','>',1)->logic('AND')->whereBetween('id',[1,10])->get();

排序(Order By)

Db::table('user')->orderBy('id','DESC')->get();

分组GROUP BY

Db::table('user')->groupBy('age')->get();

分组筛选HAVING

Db::table('user')->groupBy('age')->having('count(sex)','>',2)->get();

取部分数据LIMIT

Db::table('user')->limit(2)->get();
Db::table('user')->limit(2,5)->get();

聚合

Db::table("user")->count('id');
Db::table("user")->max('id');
Db::table("user")->min('id');
Db::table("user")->avg('id');
Db::table("user")->sum('id');

JOIN

多表关联INNER JOIN

Db::table('user')
    ->join('class','user.cid','=','class.cid')
    ->join('contacts','user.id','=','contacts.uid')
    ->get()

指定别名

Db::table('user u')->join('class c','u.cid','=','c.cid')->get()

多表关联LEFT JOIN

Db::table('user')->leftJoin('class','user.cid','=','class.cid')->get();

多表关联RIGHT JOIN

Db::table('user')->rightJoin('class','user.cid','=','class.cid')->get();

自增一个字段值

将total字段值加2

Db::table("user")->where('id',1)->increment('total',2);

自减一个字段值

将total字段减少2

Db::table("user")->where('id',1)->decrement('total',2);

表操作

测表字段是否存在

检测 news 表是否存在 title 字段

Db::fieldExists('username','user');

检测表是否存在

Db::tableExists('comment');

获所有表信息

获得当前数据库的所有表信息 , 数据大小包括碎片、数据、索引

Db::getAllTableInfo(); 

获得数据库大小

获得当前数据库大小即所有表碎片、数据、索引之和

Db::getDataBaseSize();

获取表大小

获得 news 表大小,包含表碎片、数据、索引之和

Db::getTableSize('news'); 

修复表

Db::repair('user'); 

优化表

Db::optimize('user'); 


9.路由配置
文件位置:./System/routes.php

<?php 
//首页
Route::get('/index.php','Home/Index/index');
//文章
Route::get('a{aid}.html','Home/Content/index');
//分类文章
Route::get('c{cid}_p{page}.html','Home/List/index');
//标签文章
Route::get('t{tid}_p{page}.html','Home/List/index');
//分类分页
Route::get('c{cid}.html','Home/List/index');
//标签列表分页
Route::get('t{tid}.html','Home/List/index');
//关于博主
Route::get('blog.html','Home/About/index');
前台路径:
{{a$v['aid'].html}}

10.ajax响应

ajax 响应

HDPHP 框架提供通过 ajax 返回 Ajax 请求数据,使用方法非常简单。

View::ajax($data, $type = 'JSON') 

参数说明
$data           异步返回的数据
$type           返回的数据类型,包含 JSON( 默认 ),XML,TEXT

11.success和error

语法

View::success($message = ' 操作成功 ', $url = NULL, $time = 1, $tpl = null) 
参数说明
$message                    提示信息
$url                        跳转地址 ( 默认回调历史记录 ) 
$time                       跳转时间 
$tpl                        模板文件默认为配置项 TPL_SUCCESS 或 TPL_ERROR 的值

12.模板引擎

控制器中使用

View::make();
//没有参数时使用当前方法名称做为模板文件名
View::make('add');
//添加路径时分2种情况:
//1: 从模块的View目录查找:"模块/view/add.html"
//2: 从网站根目录查找即:"/add.html"

13.分页

根据数量获取分页

Page::make(100);

获取所有分页属性

可以获取分页属性,如 文字页码、图形页码、下拉列表页码等

Page::all(100);

设置每页显示条数

Page::row(8)->make(100);

设置页码数量

Page::pageNum(5)->make(100);

自定义url

echo Page::url('list/{page}.html')->make(100,1);

定义显示文字

echo Page::desc(['pre'=>'上楼', 'next'=>'下楼','first'=>'首页','end'=>'尾页','unit'=>'个'])->make(200,2);

返回limit语句

Page::limit();

取得所有形式用于定义

$info= Page::all(200);
p($info);

获取分页的总页数

Page::totalPage();

常用:

控制器使用
//统计总条数
        $proTol=Db::table('project')->where("{$cate}is_recycle=0{$state}")->count();
        $page = Page::pageNum(9)->row(12)->make($proTol);
        View::with('page',$page);
前台模板分配
        {{$page}}


14.验证码
控制器部分:
//验证码
    public function code(){
        Code::num(4)->fontColor('#000')->width(90)->height(35)->make();    
    }

前台部分:
{{if value="!empty($_SESSION['error'])"}}
                                {{if value="$_SESSION['error'] >2"}}
                                <input type="text" name='codename' style="width:150px;"/>
                                <img src="{{U('code')}}" alt="" style="margin-left:10px;position:relative;top:10px;" id="code"/>
                                {{endif}}
                                {{endif}}

15.QQ登录
SDK下载地址: http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD
API_legend_8.png   PHP SDK v2.1   Connect_logo_1.png点我下载

配置

配置文件 Config/qq.php

"appid"     => "",//qq互联提供的的APP ID
"appkey"    => "", //qq互联提供的的APP KEY
"callback"  => "http://www.kuaixuewang.com/qq/index.php/qqcallback" //登录成功的回调地址

路由设置

Route::get('qqcallback{_param_?}','Home/Index/qqcallback');
//路由的qqcallback方法要与配置项中的 callback 设置相切尔西

控制器

<?php namespace Home\Controller;

use Hdphp\Controller\Controller;

class IndexController extends Controller
{
    //登录页面
    public function index()
    {
        View::make();
    }

    //QQ登录提交地址
    public function Qc()
    {
        Qq::qq_login();
    }

    //登录成功回调地址
    public function qqcallback()
    {
        //Qq::qq_callback 方法将 access_token 与 openid 储存到session
        //用于其他控制器或模块调用api使用
        //Qq::token 方法将accesss_token与openid 储入对象属性
        //这样才可以在本函数中执行 get_user_info 接口,否则需要刷新页面使session有效
        Qq::token(Qq::qq_callback(),Qq::get_openid());
        //调用获取用户信息 api 功能,qqcallback()回调中必须执行Qq::token()才可执行接口
        //其他函数就不需要执行Qq::token()了
        p(Qq::get_user_info());
    }
    
    //其他函数就不需要执行Qq::token(),可直接调用接口,因为access_token已经存在了session中
    public function get_user_info(){
        //所有 api 接口函数只能在执行完 qqcallback 回调后调用 
        //因为生成 access_token 与 open_id 的 session数据
        //这是调用api接口的前提
        p(Qq::get_user_info());

    }
}

登录页模板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QQ登录页面</title>
    <script type="text/javascript">
        var childWindow;
        function toQzoneLogin() {
            childWindow = window.open("{{U('Qc')}}", "TencentLogin", "width=850,height=520,menubar=0,scrollbars=1, resizable=1,status=1,titlebar=0,toolbar=0,location=1");
        }

        function closeChildWindow() {
            childWindow.close();
        }
    </script>
</head>
<body>
<a href="#" onclick='toQzoneLogin()'>qq登录</a>
</body>
</html>

方法列表

获取 open_id

Qq::get_openid();

获取登录用户的昵称、头像、性别

Qq::get_user_info();

获取登录用户在腾讯微博详细资料

Qq::get_info();

获取微博用户信息

Qq::get_info();

16.自动完成
<?php namespace Home\Model;

use Hdphp\Model\RelationModel;
class User extends RelationModel
{
    public $table = 'user';
    
    protected $auto=array(
        array('addtime','strtotime','function',2,1),
        //更新时对 addtime 字段执行strtotime函数
        );
}
方法类型: 
    string(默认)  值为处理方法 如:array('click',100,'string')
    function    函数 如:array('click','ucfirst','function')
    method      模型方法 如:array('click','getClick','method')

17.自动验证

语法

array(字段名,验证方法,错误信息,验证条件,验证时间)

验证条件 (可选): 
    self::   
1
0
 
 

参考知识库

猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP

你可能感兴趣的:(后盾HDphp框架笔记总结)