[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Roger Soares Guimarães
Criador Roger Soares Guimarães 10/12/2017

Boa tarde Carlos, como faria pra validar no Validate um raw json ?

Exemplo:

[

{"codigo":40255,

"protocolo":71450,

"data":"2017-12-10 00:00:00",

"apresentando":"CLIENTE TESTE 1",

"senha":"TES"

},

{

"codigo":40256,

"protocolo":71451,

"data":"2017-12-10 00:00:00",

"apresentando":"CLIENTE TESTE 2",

"senha":"TED"

}

]

 

Manager Carlos Ferreira 10/12/2017

Olá, Roger!
Tudo bem?

É possível validar se o formato da entrada é json, com a validation json.
Exemplo:
public function rules()
{
    return [
        'campo' => 'required|json',
    ];
}

Neste caso vai garantir que o campo "entrada" é do tipo json.


Agora, se precisa validar o tipo do valor informado no JSON, não sei se o Laravel tem recurso nativo, neste caso vai precisar criar uma validação customizada para fazer isso.
Precisa pegar o valor JSON informado pelo usuário fazer o decode e validar através de uma customização personalizada.

Veja como criar validações customizadas no Laravel: https://academy.especializati.com.br/aula/validacoes-personalizadas-avancadas-laravel

Carlos Ferreira
Criador Roger Soares Guimarães 10/12/2017

Entendi, por exemplo eu quero validar se o protocolo é único no tabela protocolos.

Roger Soares Guimarães
Criador Roger Soares Guimarães 10/12/2017

Como faço pra salvar um array json passado via raw no banco de dados, pois no exemplo só consigo salvar registro por registro.

Roger Soares Guimarães
Manager Carlos Ferreira 10/12/2017

Oi Roger!
Tudo bem?

Uma das alternativas no caso é criar uma coluna text, ou até mesmo string e salvar os JSON no formato de texto. Só se realmente for necessário salva as informações em JSON.

No caso destes dados que você recebe em JSON, acho que talvez seria uma boa salvar registro por registro em formato "comum" mesmo, sem utilizar JSON.
Assim basta pegar o valor recebido em JSON, converter para array, validar e inserir, exemplo:
public function metodo(Request $request, NomeModel $model)
{
    $response = json_decode ( $request->data_json );

    $validatedData = $request->validate($model->rules());

    // Cadastra o $response...
}

No model NomeModel precisa ter um método chamado rules() que retorna um array com as regras de validação.

Caso o JSON retorne um array com vários itens (acho que é esse o caso), vai precisar validar os dados em formato de array, assim: https://laravel.com/docs/5.5/validation#validating-arrays

Qualquer dúvida pode me retornar. Ok? :-)

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!