Проверка при передаче отдельных данных с использованием JSON.stringify - PullRequest
0 голосов
/ 05 сентября 2018

Перед передачей данных в контроллер данные добавляются:

formData.push({"name":"channels","value":JSON.stringify(channels)});

Причина этого, даже если нет данных, передается как 'channel' => '[]'

Теперь проблема в том, что когда я пытаюсь проверить это в валидаторе, я не могу использовать 'channel' => 'required', 'channel. *' => 'обязательно | существует: каналы, id',

Как проверить приведенные выше данные? Не хочу конвертировать формат как свою работающую систему. Любые предложения приветствуются. Спасибо.

Обновлено для запроса всех параметров: '_token' => 'DjqgmNab0o3ifrVrSvHh6dM5vxLP7tZDc47pq05r', 'startdate' => '05 Sep 2018', 'years' => NULL, 'months' => NULL, 'enddate' => NULL, 'addChannel' => NULL, 'offerRuns' => 'UL', 'numberOfRuns' => NULL, 'limitPeriod' => 'FP', 'licenseAudioTrack' => '1', 'amount' => NULL, 'include_materials_costs' => '1', 'include_withholding_taxes' => '1', 'paymentTermsType' => 'US', 'termsAndConditionDescription' => NULL, 'document_s3_url' => NULL, 'file' => NULL, 'fileSize' => NULL, 'materialSpecificationDescription' => NULL, 'note' => NULL, 'countries' => '[]', 'platforms' => '["1","2","3","4","5","6","7","8","9"]', 'platforms-exclusive' => '[]', 'platforms-non-exclusive' => '[]', 'platforms-holdback' => '[]', 'channels' => '[]', 'languages' => '[["56","AL",1,"seller"]]', 'currencySelectedTerm' => 'EP', 'currencyId' => '1', 'paymentTerms' => '[]'

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Как я понял, channels передается как строка JSON & required валидатор не работает, потому что это не пустая строка.

Вы можете создать собственный валидатор для проверки пустой строки JSON и использования ее.

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class JsonRequired implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return ! empty(json_decode($value, true));
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute is required.';
    }
}

И используйте его как 'channels' =>'new JsonRequired'.

Если вам нужно всего один раз в приложении, вы можете использовать Closure вместо объекта правила.

Пользовательская проверка Laravel

0 голосов
/ 11 сентября 2018

Сначала вы можете использовать json_decode для данных, а затем применить проверки

public function store(Request $request)
{
    $request_data = $request->all();

    foreach($request_data as $key=>$value)
    {
        $request_data[$key] = json_decode($value);
    }

    // And then pass data in validator rules

    $rules = [
       // All rules here
    ];

    $validator = Validator::make($request_data, $rules);
    // other code
}
0 голосов
/ 05 сентября 2018

Проверьте текущее правило проверки. В нем говорится:

Настоящий

Проверяемое поле должно присутствовать во входных данных, но может быть пустым.

Также загляните иногда в правило:

В некоторых ситуациях вы можете захотеть запустить проверку правильности поле, только если это поле присутствует во входном массиве. Чтобы быстро Для этого добавьте правило иногда в свой список правил

https://laravel.com/docs/5.7/validation#conditionally-adding-rules

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...