在将数据传递到Controller之前,正在添加数据:
formData.push({"name":"channels","value":JSON.stringify(channels)});
即使没有数据也是如此,它的传递就像 'channels'=>'[]'
现在的问题是,当我尝试在验证器中对此进行验证时,我无法使用 'channels'=>'required', 'channels。*'=>'required | exists:channels,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' => '[]'
答案 0 :(得分:0)
检查当前的验证规则。它指出:
出席
验证中的字段必须存在于输入数据中,但可以 为空。
有时还会考虑规则:
在某些情况下,您可能希望针对 仅当输入数组中存在该字段时,才可以使用该字段。要快 为此,请将有时会的规则添加到您的规则列表中
https://laravel.com/docs/5.7/validation#conditionally-adding-rules
答案 1 :(得分:0)
据我了解,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'
。
如果整个应用程序只需要使用一次,则可以使用闭包代替规则对象。
答案 2 :(得分:0)
您可以先将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
}