Laravel 似乎没有在控制器中验证数据
Laravel does not seem to be validating data in the Controller
我制作了这个表格并将其添加到 Blade 中:
<form role="form" action="{{ route('client.stepOne') }}" method="POST" class="login-box" autocomplete="off">
@csrf
<div class="row">
<div class="col-md-6">
<div class="form-group BHoma">
<label>Country:</label>
<select class="form-select" aria-label="" disabled></object>
<option value="ir" selected>ایران</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group BHoma">
<label>
<span class="required-input">*</span> Type phone number
</label>
<input autocomplete="off" class="form-control" name="phone" placeholder="مانند: 9121234567">
@error('phone')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
</div>
<ul class="list-inline pull-right">
<li>
<button type="submit" class="default-btn next-step BJadidBold">ثبت و ادامه</button>
</li>
</ul>
</form>
在控制器中,我尝试将此作为方法:
public function stepOne(Request $request)
{
// dd($request);
$validData = $request->validate([
'phone' => 'required'
]);
User::create($validData);
return redirect(route('auth.login'));
}
如您所见,我已指定需要输入 phone
。所以如果用户没有输入任何phone数字,页面上肯定会出现错误信息(我已经定义了@error('phone')...@enderror
)。
但是现在当用户没有输入任何值 phone
时它不会显示错误。
但是,如果我取消注释 dd($request)
,我可以正确地获得结果,这意味着该方法已正确连接为表单操作。
那么这里出了什么问题?我该如何解决这个问题?
更新:
dd($validData)
returns这个:
array:1 [▼
"phone" => "2321312"
]
如果我没有输入任何内容并将其留空,则不会显示任何内容。
您可以尝试这样做:
$validData = $request->validate([
'phone' => ['required', 'numeric', 'digits:10'],
]);
numeric 只接受数字,并输入 10 位数字作为有效的 phone 数字
基于 上的这个问题和评论似乎无效-反馈在这里效果不佳
你可以用这个
@error('phone')
<div class="text-danger">
{{ $message }}
</div>
@enderror
如果您查看为 .invalid-feeback
生成的 Bootstrap CSS 规则,您会看到:
.invalid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
color: #dc3545;
}
.was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip,
.is-invalid ~ .invalid-feedback,
.is-invalid ~ .invalid-tooltip {
display: block;
}
换句话说,该元素只有在其兄弟元素具有 .is-invalid
class 时才会显示,(或者父元素具有 .was-validated
并且兄弟元素被标记为无效.) 你应该修改你的 Blade 代码如下:
<div class="form-group BHoma">
<label>
<span class="required-input">*</span> Type phone number
</label>
<input autocomplete="off" class="form-control @error('phone') is-invalid @enderror" name="phone" placeholder="مانند: 9121234567">
@error('phone')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
以便在出现错误时为输入元素提供适当的class。
我制作了这个表格并将其添加到 Blade 中:
<form role="form" action="{{ route('client.stepOne') }}" method="POST" class="login-box" autocomplete="off">
@csrf
<div class="row">
<div class="col-md-6">
<div class="form-group BHoma">
<label>Country:</label>
<select class="form-select" aria-label="" disabled></object>
<option value="ir" selected>ایران</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group BHoma">
<label>
<span class="required-input">*</span> Type phone number
</label>
<input autocomplete="off" class="form-control" name="phone" placeholder="مانند: 9121234567">
@error('phone')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
</div>
<ul class="list-inline pull-right">
<li>
<button type="submit" class="default-btn next-step BJadidBold">ثبت و ادامه</button>
</li>
</ul>
</form>
在控制器中,我尝试将此作为方法:
public function stepOne(Request $request)
{
// dd($request);
$validData = $request->validate([
'phone' => 'required'
]);
User::create($validData);
return redirect(route('auth.login'));
}
如您所见,我已指定需要输入 phone
。所以如果用户没有输入任何phone数字,页面上肯定会出现错误信息(我已经定义了@error('phone')...@enderror
)。
但是现在当用户没有输入任何值 phone
时它不会显示错误。
但是,如果我取消注释 dd($request)
,我可以正确地获得结果,这意味着该方法已正确连接为表单操作。
那么这里出了什么问题?我该如何解决这个问题?
更新:
dd($validData)
returns这个:
array:1 [▼
"phone" => "2321312"
]
如果我没有输入任何内容并将其留空,则不会显示任何内容。
您可以尝试这样做:
$validData = $request->validate([
'phone' => ['required', 'numeric', 'digits:10'],
]);
numeric 只接受数字,并输入 10 位数字作为有效的 phone 数字
基于
你可以用这个
@error('phone')
<div class="text-danger">
{{ $message }}
</div>
@enderror
如果您查看为 .invalid-feeback
生成的 Bootstrap CSS 规则,您会看到:
.invalid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
color: #dc3545;
}
.was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip,
.is-invalid ~ .invalid-feedback,
.is-invalid ~ .invalid-tooltip {
display: block;
}
换句话说,该元素只有在其兄弟元素具有 .is-invalid
class 时才会显示,(或者父元素具有 .was-validated
并且兄弟元素被标记为无效.) 你应该修改你的 Blade 代码如下:
<div class="form-group BHoma">
<label>
<span class="required-input">*</span> Type phone number
</label>
<input autocomplete="off" class="form-control @error('phone') is-invalid @enderror" name="phone" placeholder="مانند: 9121234567">
@error('phone')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
以便在出现错误时为输入元素提供适当的class。