Você já deparou com a necessidade de validar uma array de informações?
Imagina o cenário:
Cliente tem várias referências comerciais, e você precisa validar cada uma, mas também estas referências não são obrigatórias.
Considerando que você está usando o formrequest, vou deixar um exemplo aqui, para o método rules():
public function rules()
{
$input = parent::all();
/*
* verifica se referencias foi enviado
* caso contrário não valida nada
* ou
* você pode definir a obrigatoriedade colocando
* return ['referencias' => 'required'];
*/
if (!isset($input['referencias'])) {
return [];
}
/*
* verifica se referencias é uma array
* caso contrário pedi para enviar como array
*/
if (!is_array($input['referencias'])) {
return ['referencias' => 'array'];
}
/*
* pega as rules padrão
* @var array
*/
$rules = [
'nome' => 'required|min:2|max:30',
'telefone' => 'required|integer|min:10|max:11'
]
/*
* pega as referências comerciais informadas
* @var array
*/
$referencias = $input['referencias'];
/*
* varre a array de referências e verifica se todos os campos
* de "rules" foram informados
* @var array
*/
$newRules = array();
foreach ($referencias as $keyRefe => $referencia) {
/*
* se for informado um id
* verifica se ele existe na tabela de referências comerciais
*/
if (isset($referencia['id'])) {
$newRules['referencias.'.$keyRefe.'.id'] = 'exists:referencias_comerciais,id';
continue;
}
/*
* varre rules para verificar as keys e
* o tipo de validação configurada, e adiciona nas novas rules
* @var array
*/
foreach ($rules as $key => $value) {
$newRules['referencias.'.$keyRefe.'.'.$key] = $value;
}
}
return $newRules;
}