Util.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace addons\shopro\controller\traits;
  3. /**
  4. * 控制器工具方法
  5. */
  6. trait Util
  7. {
  8. /**
  9. * 表单验证
  10. */
  11. protected function svalidate(array $params, string $validator = "")
  12. {
  13. if (false !== strpos($validator, '.')) {
  14. // 是否支持场景验证
  15. [$validator, $scene] = explode('.', $validator);
  16. }
  17. $current_class = static::class;
  18. $validate_class = false !== strpos($validator, '\\') ? $validator : str_replace('controller', 'validate', $current_class);
  19. if (!class_exists($validate_class)) {
  20. return;
  21. }
  22. $validate = validate($validate_class);
  23. // 添加场景验证
  24. if (!empty($scene)) {
  25. if (!$validate->check($params, [], $scene)) {
  26. $this->error($validate->getError());
  27. }
  28. } else {
  29. // 添加自定义验证场景,字段为当前提交的所有字段
  30. $validate->scene('custom', array_keys($params));
  31. if (!$validate->check($params, [], 'custom')) {
  32. $this->error($validate->getError());
  33. }
  34. }
  35. return true;
  36. }
  37. /**
  38. * 过滤前端发来的短时间内的重复的请求
  39. *
  40. * @return void
  41. */
  42. public function repeatFilter($key = null, $expire = 5)
  43. {
  44. if (!$key) {
  45. $url = request()->baseUrl();
  46. $ip = request()->ip();
  47. $key = 'shopro:' . $url . ':' . $ip;
  48. }
  49. if (redis_cache('?' . $key)) {
  50. error_stop('请稍后再试');
  51. }
  52. // 缓存 5 秒
  53. redis_cache($key, time(), $expire);
  54. }
  55. /**
  56. * 监听数据库 sql
  57. *
  58. * @return void
  59. */
  60. public function dbListen()
  61. {
  62. \think\Db::listen(function ($sql, $time) {
  63. echo $sql . ' [' . $time . 's]' . "<br>";
  64. });
  65. }
  66. }