Validar Json

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

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 11/12/2017
Carlos Ferreira

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

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

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

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

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

Manager Carlos Ferreira 12/12/2017
Carlos Ferreira

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? :-)

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!