ThinkPHP模型关联设置允许查询软删除数据
在使用ThinkPHP的模型关联和软删除功能时,我们可能会遇到一些特殊的需求。例如在某些情况下,我们希望关联数据即使已经被软删除,也需要查询出来。此时如果直接使用belongsTo之类的关联方法,查询出来的数据默认过滤了软删除数据。 例如,在获取一篇文章的发布者时,如果对应的用户已被删除,那么关联方法就无法获取对应的发布者信息。如果不想让软删除的用户影响关联结果,那么可以在模型关联中添加removeOption('soft_delete')方法: public function user() { return $this…
2023-11-06easywechat小程序支付
$this->pay = Factory::payment(Config::get('pay')); $pay_params = [ 'out_trade_no' => $order->out_trade_no, 'total_fee' => $order->pay_amount*100, 'body' => $order->name, 'trade_type' => 'JSAPI', 'openid' => $user->openid ]; $res = $this->pay->order->unify($pay_params); if ($res['return_code'] != 'SUCCESS') { throw new DisplayException("[{$res['return_code']}] {$res['return_msg']}"…
2021-08-02php实现aes-128-ecb SHA1PRNG 加解密
在PHP中实现Java下使用SecureRandom SHA1PRNG算法进行AES-128-ECB(AES/ECB/PKCS5Padding)加解密: function encrypt($data, $password) { $key = substr(openssl_digest(openssl_digest($password, 'sha1', true), 'sha1', true), 0, 16); $result = openssl_encrypt($data, 'AES-128-ECB', $key); return $result; } function decrypt($data, $password) { $key = substr(openssl_digest(openssl_digest($password, 'sha1', true), 'sha1', true), 0, 16); …
2021-06-18fastadmin根据筛选条件导出数据
使用fastadmin做后台管理系统,自带的前端导出有时候不能满足需求,需要后端生成导出文件,需要获取到用户前台的筛选条件。将以下代码放在对应js文件的控制器事件函数中: $('#btn-export').click(function() { var options = table.bootstrapTable('getOptions'); var search = options.queryParams({}); var filter = search.filter; var op = search.op; window.open('?export=1&filter=' + filter + '&op=' + op); }) 示例: index: function ()…
2021-03-22Laravel分页输出增加末尾斜杠
近期在做一个多语言网站,使用二级目录的形式来表示不同的语言,链接示例如下: https://test.com/zh-hans/ https://test.com/zh-hant/ 页面中需要使用分页,同时也需要传递查询参数。然而在页面中使用分页方法后,输出的页码对应链接变成了: https://test.com/zh-hans?page=2 这样一来所有未带斜杠的请求都要经过一次301跳转,变成了两次请求,影响加载速度。通过查看源码,发现Laravel会对path进行处理,去除前后的斜杠,因此需要在分页输出的代码中增加: ->se…
2021-01-12ThinkPHP 6 阿里云日志服务日志驱动
think-aliyunsls ThinkPHP 6 阿里云日志服务日志驱动 安装 composer require devsdawn/think-aliyunsls 配置 config/log.php // 默认日志记录通道 'default' => 'aliyunsls', // 日志通道列表 'channels' => [ 'aliyunsls' => [ // 日志记录方式 'type' => 'Aliyunsls', // 阿里云 endpoint 'endpoint' => 'http://cn-beijing.sls.aliyuncs.com/', // 阿里云 AccessKey ID 'access_key_id…
2020-03-16让ThinkPHP 6.0语言包支持多级分组
最近在做一个多语言网站项目,需要给一个多级导航栏编写语言包。虽然ThinkPHP 6.0多语言功能引入了语言分组,但其分组最深只能支持两层,在如我的这种情况下无法满足需要。 可通过修改框架src/think/Lang.php来实现多层级的支持。 在src/think/Lang.php中,替换对应方法: public function has(string $name, string $range = ''): bool { $range = $range ?: $this->range; if ($this->config['allow_group'] && strpos($name, '.')) { $names = e…
2020-02-05在Composer中使用自己修改的包
在使用composer组件时,有时候需要对包进行一些自定义修改,有一些教程中写需要修改composer.json,然后发布到Packagist,但如果只是适应自己需求所作的小修改,其实并没有必要发布到Packagist,而这样做也是Packagist不推荐的: Do not submit forks of existing packages. If you need to test changes to a package…
2019-12-08在ThinkPHP中使用Laravel Mix
参照Laravel Mix文档,可以用在独立项目中,因此可以在ThinkPHP根目录下,参照Laravel项目,建立如下两个文件: package.json { "private": true, "scripts": { "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", "watch-poll": "…
2019-10-15Composer检查可以更新的包
如果要为本地已经安装的composer包检查更新,可以用这个命令: composer show -o 运行后,会列出可以更新的包名称,以及当前版本和最新版本。
2019-09-17PHP中把字符串true/false转成boolean布尔型
在PHP中,无法使用(bool)或者settype()函数把字符串的"true"和"false"转成布尔型。如果使用上述两种办法,会始终返回true。 <?php $string = 'true'; var_dump((bool) $string); $string = 'false'; var_dump((bool) $string); $string = 'true'; var_dump(settype($string, 'boolean')); $string = 'false'; var_dump(settype($string, 'boolean')); ?> 返回 bool(true) bool(true) bool(true) bool(true) 参考PHP官网文档,可自己定义一个函数解决: //参考:https…
2019-09-03ThinkPHP 6.0 实现二级目录多语言功能
建议使用下方文章中的扩展包,它对本文中实现的多语言功能中间件进行了封装,同时计划加入更多相关功能。 前言 ThinkPHP内置了多语言功能,但是它是通过判断URL参数、Cookies、HTTP_ACCEPT_LANGUAGE请求参数来返回语言包的,由于多种语言的URL固定的,在搜索引擎抓取页面时,页面返回哪种语言取决于爬虫所带的请求头,这种方法对SEO有一定的影响,难以全面收录各种语言的版本。例如Google webmaster support的“管理多区域和多语言网站”一文中提及到: Google 建议对每种语言…
2019-08-13利用PHP把MySQL数据库内所有表编码转换为utf8mb4
<?php $mysql = mysql_connect(MYSQL_HOST,MYSQL_USERNAME,MYSQL_PASSWORD); if (!$mysql) echo "Failed to connect mysql!"; mysql_select_db(MYSQL_DBNAME,$mysql); $result = mysql_query("SHOW TABLE STATUS"); while($row = mysql_fetch_row($result)) { mysql_query("ALTER TABLE " . $row[0] . " CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"); } ?>
2018-02-22集成支付宝支付遇到的missing-signature问题解决及相关注意事项
今天用PHP集成支付宝电脑支付,使用demo进行测试时一直提示missing-signature,后来一番折腾后解决了,这里记录一下需要注意的几点。 config.php中的参数均是在蚂蚁金服开放平台密钥管理的开放平台密钥中获取。 需要下载密钥生成器先生成密钥,生成后复制公钥,在上述的密钥管理网站“RSA(SHA256)密钥(推荐)”下设置公钥。同时目录下会有rsa_private_key.pem、rsa_public_key.pem、rsa_private_key_pkcs8.pem。只需使用前两个。 1. app_id直接复制页面中的APPID 2. merchant_privat…
2018-01-19centos yum install PHP后许多模块没有安装的解决方法
PHP程序本地调试一切正常,传上centos一直报函数不存在,后来发现是相应的模块没有安装,用yum install php-devel安装PHP开发包可以解决大多数的模块不存在问题。
2017-06-23