Laravel / Lumen formRequest 在提交所有有效值时抛出错误

Posted

技术标签:

【中文标题】Laravel / Lumen formRequest 在提交所有有效值时抛出错误【英文标题】:Laravel/ Lumen formRequest throwing error on submitting all valid values 【发布时间】:2019-06-23 16:27:10 【问题描述】:

我在我的Lumen 应用程序中使用this 库来实现formRequest 功能。我已经按照文档中的说明进行了安装和配置,但似乎在某个地方我可能会丢失或在库中出现问题。以下是我的示例代码

验证类:

<?php
namespace App\Http\Requests;

use Pearl\RequestValidate\RequestAbstract;
use Illuminate\Validation\Rule;
use Illuminate\Http\Response;

class CommentFormRequest extends RequestAbstract


    /**
     * 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 [
            'name' => 'required'    
            'title' => 'required|max:255',
            'body' => 'required',
        ];
    

    /**
     * Get custom messages for validator errors.
     *
     * @return array
     */
    public function messages()
    
        return [
            //
        ];
    

控制器:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\CommentFormRequest;

class CommentController extends Controller


    public function add(CommentFormRequest $request)
    
        $request->validated();

       return response()->json(['Success']);
           


当我从邮递员提交无效数据时,会引发有效错误,但当我提交有效数据且未丢失任何表单字段时,则会显示以下错误。

(1/1) BadMethodCallException
Method App\Http\Requests\CommentFormRequest::validated does not exist.

以上错误完全让我感到困惑,因为如果找不到validated 方法,那么它如何为无效数据抛出错误?我曾尝试调试此问题,但由于我是 Lumen 的新手,所以我无法解决此问题。

【问题讨论】:

你的 Lumen 版本是多少? @Mozammil 我正在使用流明 5.7.7 为什么 CommentFormRequest 类没有空格? @SwaroopDeval 它在那里,现在更正了。 你在bootstrap/app.php中注册了服务提供者吗? 【参考方案1】:

发生这种情况的原因是validated() 在类CommentFormRequest 上不存在。

CommentFormRequest 扩展了RequestAbstract,后者又扩展了Illuminate\Http\Request,但这些类都没有validated() 的实现。

我理解混淆来自于 Laravel 有一个 $request-&gt;validated() 方法来输出经过验证的字段,但这是 Laravel 的表单请求所特有的。从它的API 可以看出,validated() 是在那里定义的。

Lumen 的documentation 也有重要通知。

Lumen 不支持表单请求。如果你愿意 喜欢使用表单请求,你应该使用完整的 Laravel 框架。

【讨论】:

感谢您的回答。是的,我在我的问题中还提到 Lumen 没有 FormRequest 功能,因为这个原因只有我使用 this 库。所以这些库根本不会提供那个功能。 就像我说的 validated() 是在 Laravel 的 FormRequest 中定义的方法。您正在使用的库扩展 Illuminate\Http\Request 没有该实现。见this。 还有其他方法可以解决这个问题吗? 您可以尝试找到另一个已实现的库。也许这个one。 我也试过那个库,我也遇到了同样的问题

以上是关于Laravel / Lumen formRequest 在提交所有有效值时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

未定义的方法 Laravel\Lumen\Application::booted()

laravel 和 lumen 有啥区别

为速度而生的LARAVEL框架LUMEN——安装与部署

Lumen 5.4 与 Laravel 可邮寄

Lumen/Laravel - 使用自定义路由器

Lumen/Laravel:计算每个嵌套关系