自定义验证消息失效求助:币种名称唯一性验证异常
币种名称唯一性验证的Laravel API实现方案
嗨,我刚好处理过类似的需求,给你整理了一套完整的实现方案,完全符合你提到的要求:
核心需求回顾
- 前端通过自定义函数
validateNameUniqness调用Laravel API做名称校验 - 名称不重复时,API返回
true,状态码200 - 名称重复时,API返回具体错误消息,状态码保持200
Laravel后端实现代码
public function validateCurrencyName(Request $request) { // 获取前端传过来的币种名称 $currencyName = $request->input('name'); // 查询数据库,检查是否存在同名币种 $isDuplicate = \App\Models\Currency::where('name', $currencyName)->exists(); if (!$isDuplicate) { // 名称唯一,返回true return response()->json(true, 200); } // 名称重复,返回友好的错误提示 return response()->json('该币种名称已经存在,请更换其他名称试试', 200); }
前端调用示例(JavaScript)
这里给你写个简单的异步调用示例,你可以根据自己的前端框架调整:
async function validateNameUniqness(currencyName) { try { const response = await fetch('/api/currency/check-name', { method: 'POST', headers: { 'Content-Type': 'application/json', // Laravel需要CSRF令牌,记得带上 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content }, body: JSON.stringify({ name: currencyName }) }); const result = await response.json(); if (result === true) { // 名称可用,执行后续逻辑 console.log('这个币种名称没问题,可以用'); } else { // 名称重复,提示用户 alert(result); } } catch (error) { console.error('校验请求出错了:', error); } }
额外优化建议
如果是编辑币种的场景,需要忽略当前编辑的币种本身,避免误判重复,可以修改后端代码,接收一个币种ID参数:
public function validateCurrencyName(Request $request) { $currencyName = $request->input('name'); $currentCurrencyId = $request->input('id'); // 新增的ID参数 $query = \App\Models\Currency::where('name', $currencyName); // 如果有ID,就排除当前币种 if ($currentCurrencyId) { $query->where('id', '!=', $currentCurrencyId); } $isDuplicate = $query->exists(); if (!$isDuplicate) { return response()->json(true, 200); } return response()->json('该币种名称已经存在,请更换其他名称试试', 200); }
别忘了在Laravel的routes/api.php里配置对应的路由:
use App\Http\Controllers\CurrencyController; Route::post('/currency/check-name', [CurrencyController::class, 'validateCurrencyName']);
内容的提问来源于stack exchange,提问作者userx
相关产品推荐
相关产品推荐

