1 Star 0 Fork 4

linder / fox.php

forked from tianqiq / fox.php 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

#fox.php 一个简陋的php mvc框架 ##特色

  1. 简单,只有一个文件fox.php,实用、易理解的框架目录结构
  2. 纯净,几乎只有MVC功能,无学习成本
  3. 扩展性强,完全能利用以前的知识积累,而不会出现类似:"lumen里面怎么发邮件?"、"ci里面怎么验证字段?"。这样本来很容易解决,但是用了框架后,被框架束缚,不得不放弃以前的方案这种纠结的事情。
  4. 直观,灵活的路由功能,巧妙支持rest

##目录结构

site/
  app/
    models/ 模型目录,可以有子目录。并不是简单是“结构体”类,而是系统业务模型,也就是说,几乎系统所有的业务功能都应该在这里 通过M($model_name)函数加载模型
    controllers/ 控制器目录,可以有子目录
    views/ 视图文件夹,可以有子目录 通过view($view_name)函数显示视图
    tools/ 工具目录,比如发送邮件,日志,缓存等工具库 通过T($tool_name)函数加载工具
 index.php 入口
 fox.php fox框架
 其他 
 

##路由介绍 采用单一入口 index.php/{controller}/{action}/{id}/{1}/{2}/{3}

  1. 系统自动调用controllers文件夹对应的controller类和action方法,每个controller中都提供_before(action执行前),_after(action执行后)2个钩子
  1. controller段为空 则自动调用默认路由的_def
  2. controller不为空,但是系统找不到对应的controller,则调用默认路由的_ec(error controller)
  3. 如果action为空,调用 _def,但是如果http method为post,而且控制器中存在_post方法,则调用_post,而不再调用_def
  4. 如果aciton不为空,但找不到对应的action,则调用_ea(error action),但是如果http method 在controller中存在对应的_method方法,则调用该方法,不再调用_ea。比如:/home/1 put,则调用_put方法。http get调用_get方法,其他http方法类似
  5. 如果你开启了rewrite,那么也是跟上面一样,不需要改变任何东西
  6. 总之,它会以你“想当然”的方式运行,你可能根本就不需要记住上面的规则,你只需要记住_ec是controller错误时候调用,_ea是错误的action调用,_def是默认action,就够了

调用action时,会传递2个参数,第一个参数是{id}部分,而第二个参数是一个数组,也就是{1},{2},{3}url后面的部分。当然当调用的是像_def _ea _ec这样的方法是, 也会是你想当然的方式传递给你, 也是2个参数,具体什么参数,把这个项目跑起来就知道。

##rest支持 建立对应的controller,在controller中建立对应的http方法即可

class UserController{
    function _get($id,$paths){

    }

    function _post($id,$paths){

    }

    function _delete($id,$paths){

    }

    function _put($id,$paths){

    }

    function _patch($id,$paths){

    }
}

##DataBase类介绍 完全采用pdo预编译sql,杜绝sql注入。提供如下几个方便的操作方法

table($table_name) 设置当前操作的表名,返回this
insert($data)插入数据到表
update($data, $where, $inputs = false) 更新数据
delete($where, $inputs = false) 删除数据
get($where, $inputs = false, $field = '*') 获取一条记录 
value($where, $inputs = false, $field = '*') 获取第一条记录的第一个列
find($where, $inputs = false, $field = '*')根据where条件获取数据
select($sql, $inputs = false)执行sql语句返回数据记录集
execute($sql, $inputs) 执行sql语句,返回PDOStatement
last_id() 返回最后的id()
begin_transaction() 开始事务
commit() 提交事务
roll_back() 回滚事务

以上所有的参数除了find方法外,where部分可以直接给id值,会自动转换为id=value。如:get(1), get("id=1") ,where实际上就是sql语句中where后面部分, 所有可以直接给order by,limit 等语句。

所有inputs部分,都可以不传,当然如果你where或者sql中有参数,则会出现错误。get('age>?',[10])

所有带inputs和field参数的方法,如果没有inputs参数传递,可以直接将field传递到inputs位置。 如 find("id=10",'id,name,pwd');

##数据验证类 调用方式

    V:Is('qq','3423');
    V:Is('email','tian@dd.com');
    V:Is('.qq','323334')  验证的时候如果类型前面带点表示可以为空;

默认支持

'email'
'phone'
'mobile' 
'url' 
'id' 
'currency' 
'number' 
'qq' 
'int' 
'double'
'en'
'ch'
'name' 
'ip'

扩展

    V:Extend($type,$reg_or_func);
    $type 验证类型
    $reg_or_func 一个正则表达式,或者一个函数如:
    V:Extend('a','/\d+/');
    V:Extend('c',function($val){
        return $val=='1';
    });

系统默认函数介绍

    D($tableName = false, $db = 'def') 直接返回一个DataBase对象,参数$db为当前需要操作的数据库连接。系统支持多数据库连接,通过配置参数db实现,db如果不是简单数组,则表示系统只需要一个数据库如:
    'db' => array(
        'dsn' => 'mysql:host=localhost;dbname=blog',
        'user' => 'root',
        'pwd' => '123123',
        'options' => array(),
        'charset' => 'utf8'
    ),
如果是复杂数组如:
    'db' => array(
        'def'=>array(
            'dsn' => 'mysql:host=localhost;dbname=blog',
            'user' => 'root',
            'pwd' => '123123',
            'options' => array(),'charset' =>'utf8',
            'charset' =>'utf8'
        ),
        'user'=> array(
            'dsn' => 'mysql:host=localhost;dbname=blog',
            'user' => 'root',
            'pwd' => '123123',
            'options' => array(),
            'charset' =>'utf8'
        )
    )则表示系统有多数据库。通过$db指定使用哪个。

    S($key, $val) 设置数据到视图,主要用于在controller设置数据到视图
    G($key) 获取视图数据中的数据
    M($model,$construct_args=null) 加载一个模型,$model可以有目录,省略.php,.class.php后缀,如果是.class.php会自动new一个对象返回。如果是一个return的配置文件,也会返回相应的配置信息。
    T($tool,$construct_args=null) 加载一个工具
    L($path,$construct_args=null) 加载一个php文件,M,T方法都基于此方法。 注意,文件只会加载一次。
   
    view($view) 在action中,显示一个相应的view文件  用于在controller action中
    js($js) 返回js到客户端,http头是:application/javascript
    none() 什么都不返回到浏览器
    alert($message, $url = '#') 浏览器弹出一个alert,然后跳转到制定的url
    text($text) 返回text到浏览器 http头是:text/plain
    json($data) 返回json到浏览器 http头是:application/json
    html($html) 返回html到浏览器
    redirect($url, $code = 301)  重定向到指定的url。

##配置文件 相信一看就知道怎么回事

$config = array(

    'db' => array(
        'dsn' => 'mysql:host=localhost;dbname=blog',
        'user' => 'root',
        'pwd' => '123123',
        'options' => array(),
        'charset' =>'utf8'
    ),

    'ini_files' => array(), //需要全局加载的文件

    'model_path' => 'app/models',
    'view_path' => 'app/views',
    'controller_path' => 'app/controllers',
    'tool_path' => 'app/tools',
    'default_controller' => 'home',

    '404' => '/404.html'
);

这就是全部! 框架非常简单,不懂得地方看源码,很多地方,都不需要强记,都会以你“想当然”的方式运行!

空文件

简介

一个简陋的php mvc框架。像狐狸一样灵巧,适合有创造性,而不想被框架束缚的phper! 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/linzaida/fox.php.git
git@gitee.com:linzaida/fox.php.git
linzaida
fox.php
fox.php
master

搜索帮助