首页 > 解决方案 > 使用表单请求时 Laravel 的“给定数据无效”

问题描述

所以我有一个包含验证规则和一些消息的表单请求。

这是我在控制器中的功能(通过 vue.axios 调用)

public function store(TaskFormRequest $request, TaskService $service): JsonResponse
{
    $data = $request->validated();

    if (!$task = $service->create($data)) {
        return JsonResponse::create(['message' => __('Can\'t create Task')], 400);
    }

    return JsonResponse::create(
        [
            'task_id' => $task->id,
            'message' => __('Task was successfully added.'),
        ]
    );
}

它工作正常,除了在未验证数据时调用存储的时刻(并且 $request 被视为 TaskFormRequest 实例)它返回“给定数据无效”JsonResponse 除了来自表单的错误消息。

这很好,但消息本身深埋在供应商中,我无法对其应用任何翻译,否则会很麻烦。

这是我的表单请求:

public function authorize(): bool
{
    return $this->user()->role === 'administrator';
}

public function rules(): array
{
    return [
        'subject' => 'required',
        'date' => 'nullable|date_format:Y-m-s',
        'user' => 'nullable|exists:users,id',
        'task_list_id' => 'required|exists:task_lists,id',
        'privacy' => 'array',
    ];
}

public function messages() {
    return [
        'subject.required' => __("Task name is empty")
    ];
}

我想一起停止这个响应,只留下表单中的错误。或者至少自定义它。

编辑:我认为问题是请求是空的?如果我null在函数的参数中输入一个默认值store,我可以检查空的 $request 并返回一个 JsonResponse,但是它不会通过正常的验证过程。

标签: phplaravellaravel-5

解决方案


我也在努力解决同样的问题。如果您的验证代码在 try 块中,您将收到“给定数据无效”错误。从 try 块中删除它,您将得到 Laravel 给出的正确错误响应。


推荐阅读