# kiss **Repository Path**: wufaliang/kiss ## Basic Information - **Project Name**: kiss - **Description**: 一个简单、高效、高性能的MVC框架,没有过多的花枝,你可以说他不入流,也可以说他跟不上时代,但它就在那里,零学习成本,一线大企业考验。 理念:让程序形式的浮躁回归正路。 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2015-09-07 - **Last Updated**: 2021-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #框架使用说明 * 目录介绍 * 控制器命名规范介绍 * 控制器注册方法介绍 * 入口文件介绍及调试开关控制介绍 * Log 和 Filter处理方式介绍 * 数据库操作介绍 * module引入方式介绍 * module的autoload介绍 * 脚本管理介绍 * 模板渲染介绍 * 编码规范介绍 ## 目录介绍 * 整体介绍 ``` lib | 框架系统目录 web | 业务项目目录 ``` * web介绍 ``` config | 项目配置文件 autoload.php cache.php db.php domain.php global.php main.php queue.php cron | 项目控制台脚本文件 action email.php function | 公共函数管理 comm function.comm.php function.view.php library | 组件及modol管理 captcha exception module LoginMode.php UserMode.php qiniu sms log | 文件日志 2015-09-09.log www | 项目C+V层 action act.user.php html params Params.php request req.user.php view user add.html view_c cronIndex.php index.php ``` ## 控制器命名规范介绍 * 控制器文件名:`act.xxx.php` xxx为全小写 eg:act.user.php * 控制器类名:act_xxx,继承action基类 eg:act_user extends action * 控制器类中必实现两个接口:runFirst 和 runLast * 业务接口命名方式:xxxAct * eg: ```php class act_user extends action { public function runFirst() {} public function runLast() {} public funciton getUserInfoAct() {} } ``` ## 控制器注册方法介绍 * 每一个控制器都需要在注册其中注册后,方可访问。 * eg: ```php class Params extends urlparse { function params() { array_push($this->actionList, 'user'); } } ``` * 每一个方法需要在方法注册器中注册后方可使用,每个控制器对应一个方法注册文件 ```php class req_user extends request { function req_user() { array_push($this->doAttr, 'getUserInfo'); } } ``` ## 入口文件介绍及调试开关控制介绍 * bower 方式访问的入口文件 index.php ```php date_default_timezone_set('Asia/Shanghai'); header('Content-Type: text/html; charset=utf-8'); //WEB调试开关FILE or BROWER or NONE defined('__DEBUG') or define('__DEBUG', 'BROWER'); //DB调试开关 defined('__DB_DEBUG') or define('__DB_DEBUG', true); //定义缓存开关 true/false, 不定义则默认开启 true defined('_CACHE_SWITCH') or define('_CACHE_SWITCH', true); //定义默认的缓存服务 defined('_CACHE_DEFAULT') or define('_CACHE_DEFAULT', 'Memcached'); //Memcache; Memcached; Redis; File; //设置memcache为一致性hash defined('_CACHE_MEMCACHE_CONSISTENT') or define('_CACHE_MEMCACHE_CONSISTENT', true); //定义默认的队列服务 defined('_QUEUE_DEFAULT') or define('_QUEUE_DEFAULT', 'Httpsqs'); //Httpsqs; Redis; Rabbitmq; //定义项目根目录 define('_APP_ROOT' , dirname(__FILE__) . "/"); //包含tieyou框架引导文件 require_once(dirname(dirname(__FILE__)) . '/lib/core.php'); //包含核心配置文件 require_once(dirname(__FILE__) . '/config/main.php'); Core::Singleton("comm.application.WebApplication")->run(); ``` * 设置开关有三个开关 * WEB吊事开关 `__DEBUG` * FILE 调试信息输出到log文件中 * BROWER 调试信息输出到浏览器中 * NONE 关闭调试 (默认值) * DB调试开关 * true 开启 * false 关闭 (默认值) * 缓存开关 * true 开启 (默认值) * false 关闭 (memcache、redis缓存失效) * 可以定义cache和队列默认使用什么工具 * 系统支持cache: * memcache * redis * memcached (默认值) * File * 系统支持队列 * httpsqs (默认值) * redis * rabbitmq ##Log 和 Filter处理方式介绍 * Log介绍 ```php Log::debug('参数调试', array('tag1', tag2)); Log::fetal('脚本错误导致脚本停止执行', array('tag1', tag2)); Log::error('严重错误,但不会对使项目崩溃', array('tag1', 'tag2')); Log::warning('参数未定义错误,但不影响请求正常相应'); Log::commit();提交日志 ``` * Filter介绍 ```php $arrParams = array( 'optional' => array ( 'password' => 'string', 'is_email' => 'boolen' ), 'required' => array ( 'email' => 'email', 'username' => 'string', 'age' => 'int|1|100', 'is_delete' => 'boolen' ) ); $arrParams = Filter::get($arrParams); //Filter::post($arrParams); $arrParams = array( 'errorList' = array( '小鸟死了,你还不来' ), 'params' = array( 'password' => 'wufaliang' ) ); ``` ## 数据库操作介绍 * 创建mysql连接对象: ```php //根据sql自动做读写分离,proxy模式 $dbProxy = core::db()->getConnect('tezign'); //slave,构建从库数据库连接对象 $dbSlave = core::db()->getConnect('tezign', 'slave'); //master,构建主库数据库的连接对象 $dbMaster = core::db()->getConnect('tezign', 'master'); $dbProxy->query('select * from tbl_user where id=10'); ``` * 数据库规范封装: ```php //mysql total $result = core::mysql('tezign')->total('feedback', array()); //mysql delete $result = core::mysql('tezign')->delete('feedback', array('and' => 'content=content')); //mysql update $result = core::mysql('tezign')->update('feedback', array('page_url' => 'http://www.wfl.com'), array('and' => 'content=content')); //mysql add $arrData = array( 'channel' => 1, 'page_url' => 'http://www.baidu.com/', 'role_id' => 1, 'status' => 1, 'content' => 'content', ); $result = core::mysql('tezign')->add('feedback', $arrData); //mysql select $arrWhere = array( array('and', 'name=wufaliang', 'age=12'), array('(or)', 'id= 3', 'id < 10'), array('or', 'id> 1'), array('in', 'status', array(1,2,3)), array('!in', 'status', array(4,5,6)), array('!like', 'postion', '%cto'), array('like', 'postion', '%coo'), ); $arrData = core::mysql('tezign', 'master')->select('user', $arrWhere, array('limit' => '1', 'group' => 'id', 'order' => 'email'), array('id', 'name', 'age')); ``` ## module引入方式介绍 * 单例模式 ```php //不带参数的引用方法 $objUser = core::Singleton("library.module.User"); //带参数的引用方法 $objUser = core::Singleton("library.module.User?username=wufaliang&passowrd=111111“); ``` * 对象模式 ```php //不带参数的引用方法 $objUser = core::Instance("library.module.User"); //带参数的引用方法 $objUser = core::Instance("library.module.User?username=wufaliang&passowrd=111111”); ``` ## module的autoload介绍 * 添加`web/config/autoload.conf`文件中,即可实现自动加载 ```php // 防止重复include本文件 if(!defined('CONFIG_AUTOLOAD_INCLUDED')){ define('CONFIG_AUTOLOAD_INCLUDED',1); $GLOBALS['AUTOLOAD'] = array( //开发自定义 'User' => 'user/User.php', 'userMode' => 'module/UserMode.php', ); } //在任何地方即可: $objUserMode = new UserMode(); ``` ##脚本管理介绍 * 脚本目录下载```web/cron/action```中 * 脚本入口文件 ```php !/usr/bin/env php date_default_timezone_set("Asia/Shanghai"); set_time_limit(0); //WEB调试开关FILE, BROWER, NONE defined('__DEBUG') or define('__DEBUG', 'NONE'); //DB调试开关 defined('__DB_DEBUG') or define('__DB_DEBUG', false); //定义缓存开关 true/false, 不定义则默认开启 true defined('_CACHE_SWITCH') or define('_CACHE_SWITCH', true); //定义默认的缓存服务 defined('_CACHE_DEFAULT') or define('_CACHE_DEFAULT', 'Memcache'); //Memcache; Redis; //设置memcache为一致性hash defined('_CACHE_MEMCACHE_CONSISTENT') or define('_CACHE_MEMCACHE_CONSISTENT', true); //定义默认的队列服务 defined('_QUEUE_DEFAULT') or define('_QUEUE_DEFAULT', 'Httpsqs'); //Httpsqs; Redis; Rabbitmq; //定义项目根目录 define('_APP_ROOT' , dirname(__FILE__) . "/"); //包含tieyou框架引导文件 require_once(dirname(dirname(__FILE__)) . '/lib/core.php'); //包含核心配置文件 require_once(dirname(__FILE__) . '/config/main.php'); Core::Singleton("comm.application.ConsoleApplication")->run(); ``` * 脚本的例子: ```php class email extends cron { public function runFirst() { } public function runLast() { } public function doEmail($name, $param) { $this->view->assign ('name', 'wufaliang'); $this->view->display ('email/add.html'); $templateData = $this->view->fetch('email/add.html'); exit (); } } ``` * 脚本需要继承cron基类 * 脚本的调用方式: ```php php cronIndex.php email doEmail 'name' 'param' ``` * 脚本中渲染页面跟C层渲染页面在一起,`web/www/view/` ## 模板渲染介绍 * 模板语法兼容smarty语法 ```html