laravel-8 - request()->validate() 在 n laravel 8 左右第二次不起作用

标签 laravel-8

我有一个方法来存储和验证来自 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/

相关文章:

laravel - Minio 与 laravel,存储桶名称作为本地服务器上的子域前缀

php - 在 laravel-8 中找不到 Laravel PHP 错误 404

php - 无法创建自定义签名验证器类 [Laravel 8 Spatie Webhook Client]

php - 将数组发送到 Blade 组件 (Laravel 8)

css - 如何在 laravel 8 中安装 Bootstrap

php - Laravel 黄昏 : cannot find Chrome binary

laravel-8 - 我可以将 LaravelCollective/html 用于 Laravel 8 应用程序吗?

laravel - 在服务器中部署Laravel项目而不更改公共(public)文件夹路径

laravel - 根据外键获取最新记录并检查其特定列是否具有值 NULL

php - 如何在 Laravel 8 中运行特定工厂