Laravel唯一字段验证问题(重复输入错误)



在我的laravel应用程序数据库中,我有一个名为apps 的表

在那个表中,我有一个列名,"域"。域是唯一的列。

问题

在我的前端刀片中有一个表单,供用户创建一个新的应用程序。从该表单中,用户应该首先输入子域名,并有一个下拉列表来选择域名。

一旦用户输入子域名,然后选择域名,我会合并来自控制器的两个输入,然后合并后的值保存在"域"列中。

例如:子域名:ABC域名:TEST.SITE合并值(我保存在域列中的值(:ABC.TEST.SITE

现在,由于我的域是唯一的,当存在重复值时,它会向我抛出一个laravel错误,即重复条目。

但在我的控制器上,我无法验证子域名输入,因为最后我正在保存合并后的值。

任何解决方案来解决这个问题并正确进行验证,

这是表格的代码。

<form id="appform" action="{{ route('app.save') }}" method="post">
@csrf
<input type="text" id="app-subdomainname" class="form-control" name="subDomainName" placeholder="{{ __('sentence.Sub Domain Name') }}" aria-required="true">
<br>
<select id="app-subdomainsuffix" class="form-control" name="subDomainSuffix" aria-required="true">
<option value="">- {{ __('sentence.Select domains') }} -</option>
<option value="TEST.SITE">TEST.SITE</option>
</select>
<br>
<select id="app-packagetype" class="form-control" name="packageType" aria-required="true">
<option value="">- {{ __('sentence.Select package type') }} -</option>
@foreach($packages as $package)
<option value="{{$package->id}}">{{$package->name}}</option>
@endforeach
</select>
<br>
<select id="app-payment" class="form-control" name="paymentoption" aria-required="true">
</select>
<br>
<select id="app-themeid" class="form-control" name="themeid" aria-required="true">
<option value="">- {{ __('sentence.Select theme') }} -</option>
<option value="default">Starter</option>
</select>
<br>
<select id="app-lang" class="form-control" name="lang" aria-required="true">
<option value="">- {{ __('sentence.Select Language') }} -</option>
<option value="en">English</option>
<option value="jp">Japanese</option>
</select>
<br>
<div class="form-group">
<button type="submit" class="btn btn-success">{{ __('sentence.Save') }}</button>
</div>
</form>  

我的控制器(只包括数据存储功能(

$this->validate($request, [
'subDomainName' => 'required',
'subDomainSuffix' => 'required',
//'package_type' => 'required',
'lang' => 'required',
'theme' => 'required',
'paymentoption' => 'required',
]);
$user = Auth::user();
$fullDomain = $request->subDomainName.'.'.$request->subDomainSuffix;
$credentials = $this->generateDbcredentials();
App::create([
'domain' => $fullDomain,
'masterUserId' => $user->id,
'dbName' => $credentials[0],
'host' =>env('DB_HOST', '127.0.0.1'),
'username' => $credentials[1],
'password' => $credentials[2],
'theme' => $request->themeid,
'lang' =>  $request->lang,
'status' => 1,
'package_type' => $request->packageType,
'payment_option' => $request->paymentoption,
'isAppCreated' => 1,
'isDefault' =>0,
]);

我如何正确地进行验证

谢谢。

尝试遵循验证规则

$this->validate($request, [
'subDomainName' => 'required',
'subDomainSuffix' => 'required',
//'package_type' => 'required',
'lang' => 'required',
'theme' => 'required',
'paymentoption' => 'required',
'domain'  => [
'required',
Rule::unique('apps')->where(function ($query) use ($request) {
return $query->whereDomain($request->subDomainName.'.'.$request->subDomainSuffix);
}),
]
],
[
'domain.unique' => __('messages.app.error.unique', [
'subDomainName' => $request->subDomainName, 
'subDomainSuffix' => $request->subDomainSuffix
]),
]);

首先,它总是抛出一个错误,因为您对html元素名称和id做了错误的处理,请写入命名转换规则

'package_type' => 'required', worng with name.

'theme' => 'required',wrong with name.

它从未完成您想要的验证。

您的唯一域验证在这里

'domain'  => [
'required',
Rule::unique('apps')->where(function ($query) use ($request) {
return $query->whereDomain($request->subDomainName.'.'.$request->subDomainSuffix);
}),
]

这是错误。。

'domain.unique' => __('messages.app.error.unique', [
'subDomainName' => $request->subDomainName, 
'subDomainSuffix' => $request->subDomainSuffix
]),

我希望这样的工作,如果不告诉我在评论

最新更新