# fox.php **Repository Path**: lampge/fox.php ## Basic Information - **Project Name**: fox.php - **Description**: 一个简陋,高性能的php mvc框架。像狐狸一样灵巧,适合有创造性,而不想被框架束缚的phper! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2016-01-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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框架 其他 ``` ##路由介绍 采用单一入口 http://host.com/index.php/{controller}/{action}/{id}/{1}/{2}/{3} > 1. 正常情况下,系统自动调用controllers文件夹对应的controller类和action方法,且每个controller中都提供_before(action执行前),_after(action执行后)2个钩子 2. controller段为空 则自动匹配默认controller 3. controller不为空,但是系统找不到对应的controller,则调用默认路由的_ec(error controller) 4. 如果系统找不到对应的action方法,则尝试匹配controller中的_http method方法。 5. 如果未匹配到对应的_http method方法,则调用_def; 6. 如果你开启了rewrite,如上面的url变成:http://host.com/{controller}/{action}/{id}/{1}/{2}/{3}那么也是跟上面一样,不需要改变任何东西 7. 总之,它会以你“想当然”的方式运行,你根本就不需要硬记上面的规则,你只需要记住_ec是controller错误时候调用,_def是默认action,这就够了 调用action时,会传递2个参数,第一个参数是{id}部分,而第二个参数是一个数组,也就是{1},{2},{3}url后面的部分。当然当调用的是像_def _ea _ec这样的方法是, 也会是你想当然的方式传递给你, 也是2个参数,具体什么参数,把这个项目跑起来就知道。 ##rest支持 建立对应的controller,在controller中建立对应的http方法即可 ```php 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'); ##数据验证类 调用方式 ```php V:Is('qq','3423'); V:Is('email','tian@dd.com'); V:Is('.qq','323334') 验证的时候,如果类型前面带点,表示可以为空; ``` 默认支持 ```php '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方法都基于此方法。 注意,文件只会加载一次。 J($assoc = true) 将客户端post过来的数据通过json_decode转换并返回 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。 rewrite($url) 重写url 到指定的url,保留get post 等数据。 注意不要重定向到controller名字相同的controller. ``` ##配置文件 相信一看就知道怎么回事 ```php $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' ); ``` ## 这就是全部! 框架非常简单,不懂得地方看源码,很多地方,都不需要强记,都会以你“想当然”的方式运行!