我有一个方法来存储和验证来自 POST 请求的数据,第一个方法工作正常并且验证成功。
public function saveClientInfo(){
ClientInfo::create($this->validateClientInfo());
}
public function validateClientInfo(){
return request()->validate([
'code' => 'required',
're' => ['required','unique:client_infos'],
'name' => 'required',
'contact' => 'required',
'email' => 'required',
'property' => 'required',
'status' => 'required'
]);
}
在第二种方法中,使用相同的结构来保存和验证请求,但它不起作用,我很好奇为什么。
public function loanStatus(){
PaymentInfo::create($this->validatePay());
}
public function validatePay(){
return request()->validate([
'payment_type' => 'required',
'terms' => 'required',
'amount_due' => 'required',
'from' => 'required',
'to' => 'required'
]);
}
顺便说一下,它们在同一个 Controller 中,所以我不会因为试图找出两者的区别以及我哪里出错而感到恶心。
注意:
the error it gives is Route GET is not Supported suggested Method POSTS some sort of like this,
这就是为什么它已经足够令人困惑了,我检查了表单和路由,并且使用了 post,所以为什么会显示这个错误,所以我认为它一定是请求验证部分。
Blade 文件
<form action="/proceed/loan-status" method="POST">
@csrf
<input type="hidden" name="re" value="{{ $re }}">
<div class="row">
<div class="p-2">
<input type="text" class="form-control" name="payment-type" placeholder="Payment Type...">
@if($errors->has('payment_type'))
<p class="alert text-danger">{{ $errors->first('payment_type') }}</p>
@endif
</div>
<div class="p-2">
<input type="text" class="form-control" name="terms" placeholder="Terms...">
</div>
<div class="p-2">
<input type="number" min="2" max="" step="any" class="form-control" name="amount" placeholder="Amount Due...">
</div>
<div class="p-2">
<input type="text" class="form-control" name="from" placeholder="From...">
</div>
<div class="p-2">
<input type="text" class="form-control" name="to" placeholder="To...">
</div>
</div>
</div>
<div class="card-footer d-flex justify-content-between">
<button type="submit" class="btn btn-success btn-sm">Save</button>
<a href="/" class="btn btn-danger btn-sm">Cancel</a>
</div>
</form>
web.php
Route::post('/proceed/loan-status', 'ClientInfoController@loanStatus');
最佳答案
如果你的 Laravel 版本是 8,请更改路由语法
Route::post('/proceed/loan-status', ClientInfoController::class,'loanStatus')->name('proceed.loan-status');
并在 Blade 形式中将 Action 更改为
<form action="{{ route('proceed.loan-status') }}" method="POST">
此外,我建议您使用像 Laravel doc 这样的验证请求,它是一个更好的编码 Controller 并根据模式进行调整。改变它,你必须有类似的东西
public function loanStatus(StorePaymentInfoRequest $request){
PaymentInfo::create($request->validated());
}
以及 StorePaymentInfoRequest 中
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'payment_type' => 'required',
'terms' => 'required',
'amount_due' => 'required',
'from' => 'required',
'to' => 'required'
];
}
关于laravel-8 - request()->validate() 在 n laravel 8 左右第二次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67798311/