【问题标题】:Laravel validation rules for JSONJSON 的 Laravel 验证规则
【发布时间】:2018-10-13 01:21:02
【问题描述】:

我正在尝试使用带有 JSON 格式数据验证规则的自定义 FormRequest。如果我在控制器中使用相同的代码而不是 FormRequest 类,那么它可以正常工作,见下文:

数组数据(来自 ajax 请求):

[
  {
    "name": "id",
    "value": "1"
  },
  {
    "name": "title",
    "value": "My fun project"
  }  
]

控制器:

public function update(Request $request, $id) {
    //convert it to readable json
    $jsonReq = $request->json()->all();
    $jsonData = array();
    foreach ($jsonReq as $json) {
        $jsonData[$json["name"]] = $json["value"];
    }

    $rules = [
        'id' => 'required|numeric:1',
        'title' => 'required|max:255',
    ];

    $validation = Validator::make($jsonData, $rules);

    if ($validation->fails()) {
      return $validation->errors();
    }
}

在控制器中使用时可以正常工作。但是,我想在一个单独的类中分离我的验证,扩展 FormRequest。这会产生一些错误,很可能是由于数组格式。

class UpdateProjectValidationRequest extends FormRequest {

      public function rules() {

        $jsonReq = $this->json()->all();
        $jsonData = array();
        foreach ($jsonReq as $json) {
            $jsonData[$json["name"]] = $json["value"];
        }

        return [
            'id' => 'required|max:1', //does not work
            $jsonData['title'] => 'required|max:255', //does not work
        ];
}

控制器:

  public function update(UpdateProjectValidationRequest $request, $id) {

    // validate against rules
    $request->rules();

错误信息:

{
  "message": "The given data was invalid.",
  "errors": {
    "My fun project": [
      "My fun project field is required."
    ],
    "id": [
      "The id field is required."
    ],

显然这与格式有关。任何想法如何解决这个问题?请注意,在 foreach 循环之后,数据的格式如下:

{
  "id": "1",
  "title": "My Fun project",
}

【问题讨论】:

  • 也许你需要把json解析成php,先试试看是否解析,通过记录请求的值

标签: json laravel validation


【解决方案1】:

好的,所以我无法使用 laravel FormRequest 解决它,而是通过将 ajax 调用序列化为 json 而不是数组来修改它本身。

    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };
//old: var formdata = JSON.stringify(jQuery('#myForm').serializeArray());
var formdata = JSON.stringify(jQuery('#myForm').serializeObject());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2020-06-09
    • 2016-12-17
    • 2020-06-25
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多