我有一个数组,它实际上是一个树数组:
array:2 [▼
0 => array:7 [▼
"id" => 36
"attribute_key" => "amount"
"attribute_value" => "Amount"
"input_type_id" => 3
"is_required" => 1
"parent_id" => null
]
1 => array:8 [▼
"id" => 37
"attribute_key" => "products"
"attribute_value" => "Products"
"input_type_id" => 7
"is_required" => 1
"parent_id" => null
"event" => null
"children" => array:2 [▼
0 => array:7 [▼
"id" => 38
"attribute_key" => "product_name"
"attribute_value" => "Product Name"
"input_type_id" => 1
"is_required" => 1
"parent_id" => 37
]
1 => array:7 [▼
"id" => 39
"attribute_key" => "price"
"attribute_value" => "Price"
"input_type_id" => 3
"is_required" => 1
"parent_id" => 37
]
]
]
]
我想得到这样的输出:
[
'amount' => 'required',
'products.*.product_name' => 'required',
'products.*.price' => 'required|numeric',
]
我的数据是高度动态的,我想为 Laravel 创建验证规则。
这是我有什么:
class EventRules
{
protected $rules = [];
public function rules(array $attributes) : array
{
foreach ($attributes as $attribute) {
$this->addRules($attribute);
}
return $this->rules;
}
public function addRules($attribute) : void
{
if (isset($attribute['children'])) {
$this->rules($attribute['children']);
return;
}
$attributeKey = $attribute['attribute_key'];
$rule = '';
$rule .= $this->addRequiredRule($attribute);
$rule .= $this->addFieldTypeRule($attribute);
$this->rules[$attributeKey] = $rule;
}
protected function addRequiredRule($attribute) : string
{
$rule = '';
if ($attribute['is_required'] === 1) {
$rule .= 'required|';
}
// The rest will be here..
return $rule;
}
无论如何,我坚持创建一个规则键(带*)。我知道我需要一个我使用的递归,但仍然不确定如何处理其余部分。
慕容3067478