Validar Json
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"
}
]
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
Entendi, por exemplo eu quero validar se o protocolo é único no tabela protocolos.
Como faço pra salvar um array json passado via raw no banco de dados, pois no exemplo só consigo salvar registro por registro.
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? :-)
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!