augushong

Results 39 issues of augushong

这个币,应该锁定1比较好吧, 这样必须关注一个项目才能得到另一个人的关注。 否则得到别人的关注,却不需要关注别人。 局部币膨胀得太厉害,导致不去积极关注其他项目。 或者出现币消耗的太快,反而没有渠道得到币,导致没法获得更多的关注。 锁定为1时,能更好的体现出互赞的本质, 否则便成了信息发布平台了。

如下面报错,其实不用特别的高并发,用workerman开4个进程,如果有频繁的模型save,没有开启数据库字段缓存,就会频繁出现下面的报错。 ``` TypeError: think\cache\driver\Redis::getTagItems(): Return value must be of type array, bool returned in /home/augushong/www/ulthon_admin/vendor/topthink/framework/src/think/cache/driver/Redis.php:233 Stack trace: #0 /home/augushong/www/ulthon_admin/vendor/topthink/framework/src/think/cache/TagSet.php(112): think\cache\driver\Redis->getTagItems() #1 /home/augushong/www/ulthon_admin/vendor/topthink/think-orm/src/db/PDOConnection.php(877): think\cache\TagSet->clear() #2 /home/augushong/www/ulthon_admin/vendor/topthink/think-orm/src/db/PDOConnection.php(1167): think\db\PDOConnection->pdoExecute() #3 /home/augushong/www/ulthon_admin/vendor/topthink/think-orm/src/db/BaseQuery.php(1260): think\db\PDOConnection->update() #4...

Cache

比如文件驱动,设置缓存空间大小,满了就清理最旧的部分。

think\Manager能否增加清空所有driver的方法,目前的`Cache::forgetDriver();`只能清空一个或指定驱动,有时候希望清空所有的已存在的驱动,以便重新加载驱动。 具体场景是,当在TP框架中,使用workerman多进程时,在开启多进程之前,就实例化了驱动,比如redis的驱动,开启多进程之后,将导致多个进程的redis连接出现并发问题。这个问题是确实存在的:比如https://www.workerman.net/q/7737 可以主动清空驱动: ![图片](https://user-images.githubusercontent.com/31880431/216627140-7a6dfe47-e865-4604-b3de-8c5774ad9ae6.png) 我想问的是,能不能做一个清空所有驱动的方法,比如`forgetAllDriver`, 另一个问题是,App有没有能力做一个清空所有驱动的方法,比如`App::resetAllDriver`,将所有的驱动,包括cache、db等,全部都清空。

http下可以`异常处理接管`,但是命令行模式下,执行命令,好像并没有任何接管是吧。 有吗?文档里好像没有,代码里好像也没有。

增加之后,第一个参数是布尔值,这样代码就可以写成这个样子: ``` $post_id = $this->request->param('post_id'); $list_visit = PostVisit::with(['post'])->order('id desc') // 这一行 ->whereIf(!empty($post_id),'post_id',$post_id) ->paginate([ 'url' => 'Index/visit', 'list_rows' => 20, 'query' => [ 'post_id' => $post_id, ], ]); View::assign('list_visit', $list_visit); ```...

模型开启了软删除,delete方法就不能用了? 使用delete可以生成sql,但是不会执行。 ``` AppOrderFile::whereNotIn('id', $new_file_id_list) ->where('order_id', $row->id) // ->delete(); ->update([ 'delete_time' => time(), ]); ```

比如这句sql: ``` SELECT * FROM `yj_system_admin` `system_admin` LEFT JOIN `yj_app_unit` `appUnit` ON `system_admin`.`unit_id`=`appUnit`.`id` WHERE `system_admin`.`delete_time` = '0' ORDER BY `sort` DESC,`system_admin`.`id` DESC LIMIT 0,15 ``` 这里的app_unit也是软删除,是不是也应该加上`appUnit.delete_time = 0`

``` View::fetch('login/ext/ulthon_login'); View::layout(false)->fetch('login/ext/ulthon_login'); ``` 如上面两个代码,第一行,预期会渲染应用下login控制器的ext/ulthon_login文件。 第二行应该也会渲染这个文件,只是第二行渲染出来的内容不包括layout才对。 但实际上,第二行会导致到不到文件,两行代码生成的template文件如下: ``` "/www/wwwroot/admin.demo.ulthon.com/app/admin/view/login/index.html" "login/ext/ulthon_login" ``` 并不能正确匹配到控制器下的文件,好像是因为layout方法返回$this,实际上是templat类,但实际上,应该返回think-view类。

默认的过滤方法为`htmlentities`,然而在PHP8.1中,这个函数的表现发生了变化,第一个参数只接受string, 需要在类库中内置一个自定义的函数,然后调用`htmlentities`. ``` if (!function_exists('tp_htmlentities')) { function tp_htmlentities($string) { if (is_null($string)) { $string = ''; } return htmlentities($string); } } ```