💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
* [导入自定义的配置如](https://www.kancloud.cn/idcpj/python/902018#_3) * [指定打印某类日志](https://www.kancloud.cn/idcpj/python/902018#_15) * [行为标签-Behavior](https://www.kancloud.cn/idcpj/python/902018#Behavior_26) * [在模版中插入 include](https://www.kancloud.cn/idcpj/python/902018#_include_62) * [RESTFul APi 接口](https://www.kancloud.cn/idcpj/python/902018#RESTFul_APi__85) * [生成静态缓存](https://www.kancloud.cn/idcpj/python/902018#_127) * [生成Lite 文件,提升网站性能](https://www.kancloud.cn/idcpj/python/902018#Lite__152) * [使用 trace](https://www.kancloud.cn/idcpj/python/902018#_trace_165) * [表单令牌](https://www.kancloud.cn/idcpj/python/902018#_177) * [Widget扩展](https://www.kancloud.cn/idcpj/python/902018#Widget_200) * [在tp3.2 中使用 trait 的命名规范](https://www.kancloud.cn/idcpj/python/902018#tp32__trait__235) * [cli模式(命令行模式)](https://www.kancloud.cn/idcpj/python/902018#cli_239) * [子域名部署](https://www.kancloud.cn/idcpj/python/902018#_256) * [block 模板继承](https://www.kancloud.cn/idcpj/python/902018#block__265) * [概念D() 函数,使 IDE识别 Model 的方法](https://www.kancloud.cn/idcpj/python/902018#D__IDE_Model__306) * [通过ip 获取地址](https://www.kancloud.cn/idcpj/python/902018#ip__344) ## 导入自定义的配置如 如`user.php等` ~~~ #在模块名/Conf/config.php中 return array( 'LOAD_EXT_CONFI ' => 'user,email', ); #即可自动加载模块名下的user.php和email.php ~~~ ## 指定打印某类日志 ~~~ define("APP_DEBUG", false); //必须关闭调试模式,不然,会有多余日志类型 封装好的日志类 function writelog($msg){ C('LOG_PATH',SITE_PATH.'data/runtime/Logs/'.CONTROLLER_NAME.'/debug/'); \Think\Log::record($msg,\Think\Log::DEBUG,true); } ~~~ ## 行为标签-Behavior 1. 在已有标签中添加行为 ,如`app_init` 2. 创建标签,并添加行为 创建在应用模块的`Home/Behavior/TestBehavior.class.php` ~~~ namespace Home\Behavior; use Think\Behavior; class TestBehavior extends Behavior{ public function run(&$pram){ $pram.="Word"; } } ~~~ 在`Conf/tags.php`注意 tag后有加s ~~~ return [ 'my_tag' => array( 'Home\Behavior\TestBehavior', ), ]; ~~~ 在控制器中写入代码 ~~~ $params = 'Hello'; Hook::listen('my_tag',$params); print_r($params); //Hello Word ~~~ > 注:由于run方法不返回值,但是由于是引用传值,所在run中所做的修改在控制器中依然会变 ## 在模版中插入 include ~~~ <include file="admin/demo" /> #admin模块下的 demo,并不在某个控制器对应目录下 ~~~ 1. 传值方式一,在表中输入值 ~~~ <include file="admin/demo" title="hellol word"/> demo.html中 <p>[title]</p> ~~~ 2. 如果是同一变量名,无需传值 ~~~ <!--如果在住模版中有 $lists,则无需传值--> <foreach name="lists" item="vo"> <tr> <td>{$vo.id} </td> <td>{$vo.name}</td> </tr> </foreach> ~~~ ## RESTFul APi 接口 [参考文档](https://www.kancloud.cn/manual/thinkphp/1879) > 如果某控制器为纯接口形式,则也可继承该方法,而无需设置 在模块名/userController 控制器中 创建继承RestController的方法 ~~~ class UserController extends RestController{ protected $allowMethod = array('get','post','put','delete'); // REST允许的请求类型列表 protected $allowType = array('html','xml','json'); // REST允许请求的资源类型列表 Public function index(){ switch($this->_method){ case 'get': //todo $this->response(array('name'=>'cpj','age'=>12),'json',200); break; case 'put': //todo $this->response(array('name'=>'cpj','age'=>12),'json',200); break; case 'post': //todo $this->response(array('msg'=>'提交成功'),'json',200); break; case 'delete': //todo $this->response(array('msg'=>'删除成功'),'json',200); break; } } } ~~~ 在data/Conf/config.php 中添加 路由映射 ~~~ 'URL_ROUTER_ON'=>true, 'URL_ROUTE_RULES'=>[ 'imapp/dept'=>array('api/dept/dept_list_redis'), ], ~~~ 访问`delete`形式方法`http://www.mapi.com/user/2`则提示删除成功 ## 生成静态缓存 > [查考文档](https://www.kancloud.cn/manual/thinkphp/1839) 在模块或commom /Conf/config.php中配额, ~~~ return array( 'HTML_CACHE_ON' => true, // 开启静态缓存 'HTML_CACHE_TIME' => 60, // 全局静态缓存有效期(秒) 'HTML_FILE_SUFFIX' => '.html', // 设置静态缓存文件后缀 'HTML_CACHE_RULES' => array( // 定义静态缓存规则 '*'=>array('{:module}/{:controller}/{:action}/{$_SERVER.REQUEST_URI|md5}'),//生成的文件路径,只要注意同样一个页面生成的路径一样即可 ) ); ~~~ 生成静态文件后,如果存在静态文件,则提前与调用操作方法 ~~~ public function show(){ echo "hello word"; //存在静态缓存,则hello word 不会输出 //todo $this->display(); } ~~~ ## 生成Lite 文件,提升网站性能 1. 在入口文件`index.php` `define('BUILD_LITE_FILE',true);` 2. 替换框架入口文件 ~~~ require './ThinkPHP/ThinkPHP.php'; // 改成 require 'Application/Runtime/lite.php'; //即在index.php 中引入lite 文件即可. ~~~ 3. 通过`index.php`访问即可 ## 使用 trace ~~~ 'SHOW_PAGE_TRACE' =>true, //开启 //输出trace trace($_GET,'用户信息'); //显示 用户信息:Array ( [p_reload] => 1 [reload_time] => 1524811491619 [bookcate] => 1 ) ~~~ ## 表单令牌 > 防止表单的重复提交 在`模块名/Conf/tags.php`中 ~~~ return array( // 添加下面一行定义即可 'view_filter' => array('Behavior\TokenBuild'), // 如果是3.2.1以上版本 需要改成 // 'view_filter' => array('Behavior\TokenBuildBehavior'), ); ~~~ 添加配置参数 `'TOKEN_ON' => true, // 是否开启令牌验证 默认关闭` 验证 ~~~ $User = D("User"); // 生成模型类的验证 if (!$User->create($_POST)){ // 令牌验证错误 } ~~~ ## Widget扩展 > 常用于需要在模版的foreach 循环中在进行复杂操作 ~~~ //创建home/widget/DemoWidget.class.php namespace Home\Widget; use Think\Controller; class DemoWidget extends Controller{ public function menu($param1,$param2){ //方式1. 直接删输出 return [$param1, $param2,]; //只能是数组索引才会被list //方式2.支持模版 $menu = M('Cate')->getField('id,title'); $this->assign('menu',$menu); $this->display('Cate:menu'); //模版中 /* <foreach name="menu" item="title"> {$key}:{$title} </foreach> */ } } //在home/view/index/index.html中 <php> list($name,$param) = W('demo/menu',[['name'=>'cpj'],['age'=>23,'user'=>'hello']]); //w函数数组的形式传参 dump($name); dump($param); </php> ~~~ ## 在tp3.2 中使用 trait 的命名规范 后缀必须因为`xxxx.class.php`而非`xxx.php` ## cli模式(命令行模式) 推荐使用绝对路径的形式 在`index.php`中添加`__DIR__` ~~~ define('APP_PATH',__DIR__.'/../Application/'); // 引入ThinkPHP入口文件 require __DIR__.'/../ThinkPHP/ThinkPHP.php'; ~~~ 1. 无参运行 `php index.php cli/index/demo` 2. 有参数运行-参数可写在方法的参数中 `php index.php statis/index/demo/name/cpj/age/12` ## 子域名部署 ~~~ 'APP_SUB_DOMAIN_DEPLOY' => 1, // 开启子域名配置 'APP_SUB_DOMAIN_RULES' => array( 'admin' => 'Admin', //admin.demo.com 'test' => 'Test', //test.demo.com ), ~~~ ## block 模板继承 > [手册](https://www.kancloud.cn/manual/thinkphp/1800) 基础模板 ~~~ <head> <meta charset="utf-8"> <!--基础模板需要写的head--> <block name="style"></block> </head> <html> <body> <!--基础模板需要写的内容--> <div class="main-content"> <block name="main">文章内容(这段注释会被覆盖掉) </block> </div> <!--基础模板需要写的script--> <block name="script"></block> </body> <html/> ~~~ 继承 ~~~ <extend name="Public/base" /> <block name="style"> <!--针对这个页面的css,link等--> </block> <block name="main"> <!--针对这个页面的内容--> </block> <block name="script"> <!--写正对这个页面的 script--> </block> ~~~ ## 概念D() 函数,使 IDE识别 Model 的方法 baseModel.class.php ~~~ class baseModel { protected static $_single; public static function DD() { $className = get_called_class(); if(!class_exists($className)){ return new \Think\Model(); } $className = substr($className,strripos($className,'\\')+1,-5); $formatStr = preg_replace("/([A-Z])/", ",\\1", $className); $wordList = explode(',', $formatStr); array_shift($wordList); $tableName = ''; foreach($wordList as $word){ $tableName .= strtolower($word).'_'; } $tableName = trim($tableName,'_'); if(!isset(self::$_single[$tableName]) || empty(self::$_single[$tableName])){ $obj = self::$_single[$tableName] = new static(); }else{ $obj = self::$_single[$tableName]; } if(empty(self::$_single[$tableName]->tableName)){ //新代码不会再model中定义tableName,所以要在这里定义,以便im_app使用 self::$_single[$tableName]->tableName = $tableName; } return $obj; } } ~~~ 新的model 继承 baseModel,在其他控制器中使用 ~~~ UserModel::DD(); ~~~ ## 通过ip 获取地址 ~~~ $Ip = new IpLocation(); $Ip->getlocation('115.206.59.217'); /*[ 'ip' => '115.206.59.217', 'beginip' => '115.206.34.0', 'endip' => '115.206.137.255', 'country' => '浙江省杭州市', 'area' => '电信', ];*/ ~~~ 复制 点赞