проверка корректности по массиву и отсутствующим параметрам - PullRequest
0 голосов
/ 15 июня 2019

У меня есть массив, который я хотел бы проверить.Полезная нагрузка json выглядит следующим образом

{   
    "guid" : "d19b122dc48a4663e33eaa7c83993f7a40ae9329",
    "organization" : {
        "phone" : "0466144569",
        "email" : "test@test.com",
        "country" : "US",
        "language" : "en",
        "name" : "rockstar"
    },
    "user" : {
        "username" : "rockstar",
        "password" : "rockstarpassword",
        "consent" : {
            "gdpr": "true",
            "version": "consent_doc_2009"
        }
    }
}

Проблема заключается в том, что эта полезная нагрузка может изменяться в 4 различных сценариях.

1) Вся полезная нагрузка существует.Как и в приведенном выше примере.

2) Где organization отсутствует.

{   
        "guid" : "d19b122dc48a4663e33eaa7c83993f7a40ae9329",
        "organization" : null
        "user" : {
            "username" : "rockstar",
            "password" : "rockstarpassword",
            "consent" : {
                "gdpr": "true",
                "version": "consent_doc_2009"
            }
        }
    }

3) Где user отсутствует.

  { 
        "guid" : "d19b122dc48a4663e33eaa7c83993f7a40ae9329",
        "organization" : {
            "phone" : "0466144569",
            "email" : "test@test.com",
            "country" : "US",
            "language" : "en",
            "name" : "rockstar"
        },
        "user" : null
        }
    }

4)Где organization и user оба отсутствуют.

 {  
        "guid" : "d19b122dc48a4663e33eaa7c83993f7a40ae9329",
        "organization" : null,
        "user" : null

    }

У меня есть класс запроса laravel, который это проверяет.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class organizationCreation extends FormRequest
{
    /**
     * 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 [
            'guid' => 'required|string',
            'organization.name' => 'required_with:organisation|string|min:3',
            'organization.phone' => 'required_with:organisation|regex:/^([0-9\s\-\+\(\)]*)$/|max:20',
            'organization.country' => 'required_with:organisation|max:2',
            'organization.language' => 'required_with:organisation|max:2',
            'organization.email' => 'required_with:organisation|string|max:255',
            'user.username' => 'required_with:user|string|max:255',
            'user.password' => 'required_with:user',
            'user.consent.gdpr' => 'required_with:user|boolean',
            'user.consent.version' => 'required_with:user|string|max:255',
        ];
    }
}

Я попробовал описанную выше проверку и использовал required_with, но затем похоже, что проверки не пройдены, и я не уверен, что делать с этой проверкой, которая имеет 4 различных правила.

Я могу отдельно проверить их, проверив полезную нагрузку с помощью if и не писать для нее код, но я бы хотел сделать их все сразу.

1 Ответ

0 голосов
/ 15 июня 2019

Документация для required_with говорит нам следующее:

Проверяемое поле должно присутствовать и не быть пустым, только если присутствуют какие-либо другие указанные поля.

В вашем случае поля присутствуют, но имеют значения null. Можно ли вообще не отправлять ключи или у вас нет контроля над клиентом, использующим ваш API? В этом случае вы можете использовать промежуточное программное обеспечение для удаления нулевых значений.

...