Files
fastmovieai/fastmovie-admin/app/expose/validate/Validate.php
T
李建琦 eae151fd57 FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0)
- 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION
- vendor/示例资源已gitignore
2026-08-26 18:37:36 +08:00

65 lines
1.6 KiB
PHP

<?php
namespace app\expose\validate;
use think\facade\Db;
use think\Validate as ThinkValidate;
class Validate extends ThinkValidate
{
protected $failException = true;
protected $db;
/**
* 设置Db对象
* @access public
* @param Db $db Db对象
* @return void
*/
public function setDb($db)
{
$this->db = $db;
}
public function unique($value, $rule, array $data = [], string $field = ''): bool
{
if (is_string($rule)) {
$rule = explode(',', $rule);
}
$this->setDb(new Db); //设置Db对象
if (false !== strpos($rule[0], '\\')) {
// 指定模型类
$db = new $rule[0];
} else {
$db = $this->db::name($rule[0]);
}
$map = [];
if (isset($data[$field])) {
$map[] = [$field, '=', $data[$field]];
}
if (!empty($rule[1]) && strpos($rule[1], '^')) {
// 支持多个字段验证
$fields = explode('^', $rule[1]);
foreach ($fields as $key) {
if (isset($data[$key])) {
$map[] = [$key, '=', $data[$key]];
}
}
}
$pk = !empty($rule[3]) ? $rule[3] : $db->getPk();
if (is_string($pk)) {
if (isset($rule[2])) {
$map[] = [$pk, '<>', $rule[2]];
} elseif (isset($data[$pk])) {
$map[] = [$pk, '<>', $data[$pk]];
}
}
if ($db->where($map)->field($pk)->count()) {
return false;
}
return true;
}
}