Skip to content

light0011/hfphp2.0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hfphp2.0

自主编写的php框架,hfphp2.0版,架构设计主要参考ThinkPHP框架(核心板)编写

所谓框架不在多而在于精,或者说不在于精而在于真正能够内化为自己的东西,所以开始学习TP框架。不仅仅是使用,更是源码的学习。知其然,更要知其所以然。

PHP框架有很多,Yii、laravel更是优秀,但是TP是我使用的第一个框架,有很多缺点,但是仍然有很多优点,仍然有很多我学习的地方。

希望有一起学习TP框架源码的同学可以邮件交流!

框架介绍说明,持续更新中。。。

TODO

1、实现session的mysql驱动
2、引入各种工具类
    1) 验证码类写完了,但是无法生成图片,应该是框架架构问题,待查。
    
3、增加日志记录模块,方便bug查询
4、配置文件分目录、分文件进行配置,方便管理

目录结构

www  WEB部署目录(或者子目录)
├─index.php       单一入口文件
├─README.md       README文件
├─App             应用目录
└─HFPHP           框架目录

其中框架目录ThinkPHP的结构如下:

├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│  ├─Common       核心公共函数目录
│  ├─Conf         核心配置目录
│  ├─Lang         核心语言包目录
│  ├─Library      框架类库目录
│  │  ├─Core      核心Think类库包目录
│  │  ├─Driver    具体驱动文件目录,例如缓存
│  │  ├─ ...      更多类库目录
│  ├─Tpl          系统模板目录
│  └─HFPHP.php 框架入口文件

自动创建目录

在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home。

App
├─Common         应用公共模块
│  └─Conf        应用公共配置文件目录
├─Home           默认生成的Home模块
│  ├─Common      模块函数公共目录
│  ├─Controller  模块控制器目录
│  ├─Model       模块模型目录
│  └─View        模块视图文件目录
├─Runtime        运行时目录
│  ├─Cache       模版缓存目录
│  ├─Data        数据目录
│  ├─Compile     编译目录

缓存管理

    支持memcache与redis,默认为memcache。
    
    配置格式
    
    'MEMCACHE_CACHE_CONFIG' =>  array(
        array(
            'host' => '127.0.0.1',
            'port' => '11211'
        )
     ),
    
    'REDIS_CACHE_CONFIG' =>  array(

        
        // 'host' => array('192.168.0.1','192.168.0.2')
        'host' => '127.0.0.1',
        'port' => '6379',
        'timeout' => '1',
        'db' => 1

    ),
    
    memcache可以配置多台服务器并进行连接,并且在php.ini里面配置,从而存储方式为一致性hash
    redis也可配置多台服务器,但是只会连接一台,建议多台redis服务器的话,配置为主从复制,进行数据备份
    实例化方式如下
    
    $memcache = Cache::getInstance() /$redis = Cache::getInstance('redis');
    
    set/mset默认缓存时长60s,如需修改,直接多传一个时间参数即可。例如$memcache->mset($data,600)/$memcache->set('name','hanfeng',600)

    常见用法如下,除此之外,支持memcache/redis的所有方法.
    
    $data = array(
        'name' => 'lijun',
        'sex' => 'male',
        'class' => 'junior'
    );

    $memcache->mset($data);


    $key = array('name','sex','class');
    
    $memcache->mget($key)

    $memcache->del('name');

    
    
    $memcache->set('num',1);
    
    $memcache->incr('num');
    
    $memcache->decr('num');
    
    $memcache->get('num');
    
    注:如存储的value为数组,先转化为json格式,在进行存储。

Session与Cookie

    注:若将session储存在redis/memcache中,请先配置php.ini文件,之后正常使用session功能即可。
    但是暂时无法存储到数据库,该驱动功能暂时尚未完成。
    
    $session = Session::getInstance();
    
    //设值
    $session->set('key','value');

    //取值
    $session->get('key');
    
    //取所有值
    $session->getAll();

    //删除值
    $session->del('key');

    //删除所有值
    $session->clear();
    
    
    
    $cookie = Cookie::getInstance();
    
    $cookie->set('name','lijun');

    $cookie->get('name');

    $cookie->del('name');

    //清除所有的cookile
    $cookie->clear();

    //设定值时也可以传入配置参数数组,但是删除该值时也必须传入相同的配置参数数组方可删除。
    $config = array('path' => '/','domain' => 'hfphp.com');

    $cookie->set('name','lijun',$config);
    
    //在不符合设定时传入配置的条件下,即不属于该网站下或者路径下,将无法获得值
    $cookie->get('name');

    $cookie->del('name',$config);

    //清除所有的cookile,只是在相同的配置下
    $cookie->clear($config);

命名空间

    支持命名空间,如果不清楚什么是命名空间,可以参考PHP手册相关部分。这里就不对命名空间的用法做过       多的描述了。

常用工具

    验证码
             
        //生成验证码
        //实例化时可传入配置数组
        $verify = new \Vendor\Verify();
        //生成验证码图片,并且将生成的验证码存在于$_SESSION中 
        //可传入$id字符串,比如'1','2',用于区别不同的验证码,默认为空     
        $verify->verify();
        
        //检验验证码
        //传入参数分别为待验证的验证码,以及用于区别不同验证码的id
        $verify->check($code,$id);

函数说明

    A()
     
        实例化控制器,文件上方不需引入命名空间,已自动引入
        
        <?php
        
        namespace Home\Controller;
        use Core\Controller;
        
        class IndexController extends Controller {
        
            public function index(){
        
        
                $user = A('User');
        
                $user->say();
        
        
            }
     
        
        }
        
        
        
    
    D()
    
        实例化模型
    
    M()
    
        用于实例化一个没有函数文件的Model
    
    U()
    
        URL组装,格式:U('[分组/模块/操作]?参数','参数','伪静态后缀')
    
    
    F()
    
        快速文件数据读取和保存,针对简单类型数据,包括字符串与数组,本方法相当于S()方法的子集
    
   
    
    import()
    
        导入类库方法,可导入本项目下,公共目录下,以及框架自带类库
        
        import('@.Model.AttrModel');   分析路径为  ./App/Home/Model/AttrModel.class.php
        import('Common.test.test');   分析路径为  ./App/Common/test/test.class.php
        import('HF.Core.App');   分析路径为  E:\www\hfphp2.0\HFPHP/Library/Core/App.class.php  

一、模型(亦可以使用ORM方式)

select

1、实现连贯操作,参数只能是字符串

2、直接给select传条件数组

add()

1、直接给add方法传数组

save()

1、实现连贯操作,一般前面对一个where(),里面参数为字符串,写修改条件。

2、直接给save方法传数组,但数组中应有主键,默认为主键为修改条件

delete()

1、实现连贯操作,参数只能是字符串

2、直接给delete传条件数组

find()

用法用select(),只取出一条数据

create()

用于创建数据,接收post过来的表单

$User = M("User"); // 实例化User对象

// 根据表单提交的POST数据创建数据对象

$User->create();

$User->add(); // 根据条件保存修改的数据

自动验证

$validate

用法与thinkphp相同

二、控制器

assign()

注入变量

display()

加载模板

四、模板引擎标签

普通变量标签

{$tag}

if标签

{if $tag}

{else}

{/if}

foreach标签

{foreach $tag(key,value)}

   {@key}

   {@value}

{/foreach}

include标签

{include file="index.tpl"}

{:function(…)}

例如,输出U方法的返回值:

{:U('User/insert')}

编译后的PHP代码是

<?php echo U('User/insert');?>

About

2.0版,参考ThinkPHP框架(核心板)编写

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published