【问题标题】:How can I validation object string with validation laravel?如何使用验证 laravel 验证对象字符串?
【发布时间】:2018-08-23 03:03:58
【问题描述】:

我使用 laravel 5.6

我使用https://laravel.com/docs/5.6/validation#form-request-validation 来验证服务器端

我的控制器是这样的:

<?php
....
use App\Http\Requests\UserUpdateRequest;

class UserController extends Controller
{
    ...
    public function update(UserUpdateRequest $request)
    {
        // dd($request->all());
    }
}

在更新方法中运行语句之前,它会调用UserUpdateRequest到验证服务器端

这样的验证:

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserUpdateRequest extends FormRequest
{
    ....
    public function rules()
    {
        dd($this->request->all());
        return [
            'name'          => 'required|max:50',
            'gender'        => 'required',
            'birth_date'    => 'required',
            'address'       => 'required',
            'status'        => 'required'
        ];
    }
}

dd($this->request->all())的结果;像这样:

Array
(
    [selected_data] => {"name":"agis","gender":"2","birth_date":"2018-03-13","address":"london"}
)

如果数据是这样的对象数组,我该如何验证?

【问题讨论】:

    标签: laravel validation request required laravel-5.6


    【解决方案1】:

    你可以像这样使用点符号:

    public function rules()
    {
        return [
            'selected_data.name' => 'required|max:50',
            'selected_data.gender' => 'required',
            'selected_data.birth_date' => 'required',
            'selected_data.address' => 'required',
            'selected_data.status' => 'required',
        ];
    }
    

    在此处了解更多信息:Validating Array

    希望这会有所帮助。

    【讨论】:

    • 存在这样的错误:The given data was invalid. The selected data.name field is required. The selected data.gender field is required. etc。而我已经填写了数据
    • 我想知道这是否应该是selected_data.*.name,其中*代表selected_data的任何索引。
    • @SuccessMan 尝试仅转储selected_data 输入。如果您尝试在 UserUpdateRequest 类中转储它,您可以这样做:dd($this-&gt;request-&gt;get('selected_data'))。检查它是array 还是string。根据您上面的解释,selected_data 看起来像一个 JSON 字符串。
    • @Risan Bagja Pradana 我尝试评论 Tim Lewis,它有效
    【解决方案2】:

    我会添加 *,因为如果您传递多个对象,则需要全部验证。

    像这样:

    public function rules()
    {
        return [
            'selected_data.*.name' => 'required|max:50',
            'selected_data.*.gender' => 'required',
            'selected_data.*.birth_date' => 'required',
            'selected_data.*.address' => 'required',
            'selected_data.*.status' => 'required',
        ];
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2016-03-19
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多