Laravel: Validation->Como validar pelo form request uma array de dados

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;
}