Crie o model cliente
para criar o model cliente use o comando: php artisan make:model Cliente -m
adicione os seguintes campos:
- status_id relacionado com a tabela status)
- tipo_cliente varchar(1)
- eh_consumidor varchar(1)
- nome_razao_social varchar(80)
- nome_fantasia varchar(80)
- cpf_cnpj varchar(20)
- rg_ie varchar(20)
- isento_ie_estadual varchar(30)
- tipo_contribuinte varchar(30)
- responsavel varchar(80)
- idestrangeiro varchar(20)
- indFinal inteiro
- logradouro varchar(80)
- numero varchar(10)
- bairro varchar(50)
- uf varchar(2)
- complemento varchar(50)
- telefone varchar(20)
- celular varchar(20)
- email varchar(100)
- senha varchar(100)
- cep varchar(10)
- ibge varchar(15)
- cidade varchar(100)
- nascimento date()
$table->bigInteger('status_id')->unsigned();
$table->foreign('status_id')->references('id')->on('statuses');
$table->string('tipo_cliente', 1)->default('F');
$table->string('eh_consumidor', 1)->nullable()->default('N');
$table->string('nome_razao_social', 100);
$table->string('nome_fantasia', 80)->nullable();
$table->string('cpf_cnpj', 19);
$table->string("rg_ie", 20)->nullable();
$table->string("isento_ie_estadual", 30)->nullable();
$table->string("tipo_contribuinte", 30)->nullable();
$table->string("responsavel", 80)->nullable();
$table->string("idestrangeiro", 20)->nullable();
$table->integer('indFinal');
$table->string('logradouro', 80);
$table->string('numero', 10);
$table->string('bairro', 50);
$table->string('uf', 2);
$table->string('complemento', 50)->nullable();
$table->string('telefone', 20)->nullable();
$table->string('celular', 20)->nullable();
$table->string('email', 100)->nullable();
$table->string('senha', 100)->nullable();
$table->string('cep', 10)->nullable();
$table->string('ibge', 15)->nullable();
$table->string('cidade',100)->nullable();
$table->date("nascimento")->nullable();
Configure os fillables do Model Cliente
protected $fillable =['id', 'status_id','tipo_cliente', 'nome_razao_social',
'nome_fantasia','cpf_cnpj', 'rg_ie', 'im', 'suframa', 'responsavel',
'isento_ie_estadual', 'tipo_contribuinte', 'indFinal','nascimento', "senha",
'logradouro', 'complemento', 'numero', 'bairro', 'telefone', 'celular','idestrangeiro',
'email', 'uf', 'cep', 'ibge', 'cidade', 'nascimento', 'eh_consumidor',
];
Crie a seed Cliente
para criar a seed status use o comando: php artisan make:seed ClienteSeeder
Crie um cliente para que seja o cliente Consumidor e outro cliente teste para ajudar nas operações iniciais
$consumidor = new \stdClass();
$consumidor->tipo_cliente = "F";
$consumidor->eh_consumidor = "S";
$consumidor->cpf_cnpj = "11111111111";
$consumidor->nome_razao_social = "CLIENTE CONSUMIDOR";
$consumidor->indFinal = "1";
$consumidor->logradouro = "logradouro";
$consumidor->numero = "123";
$consumidor->bairro = "Bairro";
$consumidor->cidade = "sem cidade";
$consumidor->uf = "UF";
$consumidor->cep = "000000";
$consumidor->status_id = config("constantes.status.ATIVO");
$consumidor->senha = md5('1234');
$cliente = Cliente::Create(objToArray($consumidor));
Cliente::Create([
'nome_razao_social' => 'Cliente Teste',
'nome_fantasia' => 'Cliente Teste',
'cpf_cnpj' => '60724810005',
'telefone' => '9899999999',
'email' => 'mjailton@gmail.com',
'senha' => md5('1234'),
'cep' => '65060180',
'logradouro' => '1ª Travessa das Flores',
'numero' => '09',
'uf' => 'MA',
'cidade' => 'São Luís',
'complemento' => 'qd 20',
'bairro' => 'Cruzeiro do Anil',
'tipo_contribuinte' => '9',
'ibge' => '2111300',
'indFinal' => '1',
'status_id' => config("constantes.status.ATIVO")
]);
Crie um controller de recursos chamado Cliente, para que o projeto fique mais organizado salve o controller numa pasta chamada Cadastro
No controller ClienteoController implemente o método index, o qual deverá:
- pegar a lista de clientes e colocar um array
- chamar a view Cliente/Index com o array criado com a lista de clientes
public function index()
{
$dados["lista"] = Cliente::get();
return View("Cadastro.Cliente.Index", $dados);
}
Crie a view para a listagem de cliente
Dentro da pasta resources/view crie uma pasta chamada de Cadastro e dentro de Cadastro crie uma outra chamada de Cliente e dentro da pasta Cliente crie um arquivo chamado Index.blade.php
Copie o conteúdo do arquivo lst_cliente para o arquivo Cadastro/Cliente/Index.blade.php, não esqueça envolvê-lo pelos comandos:
@extends('template')
@section('conteudo')
//aqui fica o conteúdo do arquivo
@endsection
Na view Index, faça os seguintes procedimentos:
- Faça o loop para receber os dados do banco e listar na tabela
- Configure o link para fazer a edição de um registro
- Configure o link para fazer a exclusão de um registro
@foreach ($lista as $l)
<tr>
<td align="center">{{ $l->id }}</td>
<td align="left">{{ $l->nome_razao_social }}</td>
<td align="left">{{ $l->cpf_cnpj }}</td>
<td align="center">{{ $l->email }}</td>
<td align="center">{{ $l->celular }}</td>
<td align="center">
<a href="{{ route('cliente.edit', $l->id) }}"
class="btn d-inline-block btn-outline-roxo"><i class="fas fa-edit"></i>
Editar</a>
<a href="javascript:;"
onclick="confirm('Tem Certeza?') ? document.getElementById('apagar{{ $l->id }}').submit() : '';"
class="btn d-inline-block btn-outline-vermelho ml-1"><i
class="fas fa-trash-alt"></i> Excluir
<form action="{{ route('cliente.destroy', $l->id) }}" method="POST"
id="apagar{{ $l->id }}">
@method('delete')
@csrf
</form>
</a>
</td>
</tr>
@endforeach
Prepare seu sistema para que permita que sejam feitos filtros por cliente, email e cpf
No método index faça as seguintes implementações:
- Coloque um Request como parâmetro de recebimento do método
- Crie um objeto chamado filtro com os campos nome, cpf e email
- Na array $dados["lista"] chame o método filtro do model cliente e passe como parâmetro o objeto filtro criado
- para o array $dados liste as clientes
public function index(Request $request)
{
$filtro = new stdClass;
$filtro->nome = $request->nome ?? null;
$filtro->cpf = $request->cpf ?? null;
$filtro->email = $request->email ?? null;
$dados["lista"] = Cliente::filtro($filtro);
$dados["filtro"] = $filtro;
return View("Cadastro.Cliente.Index", $dados);
}
No model Cliente, crie um método chamado filtro que receba como parâmetro um objeto $filtro e um variável chamada $paginas inicializada com zero e implemente o método de forma que:
- Se houver o campo $filtro->nome, faça o filtro pelo nome_razao_social
- se houver o campo $filtro->cpf, faça o filtro pela cpf_cnpj
- se houver o campo $filtro->email, faça o filtro pela email
- se a variável páginas for maior que zero que o seja do tipo paginate(), senão que seja get()
public static function filtro($filtro, $paginas=0){
$retorno = self::query();
if($filtro->nome){
$retorno->where("nome_razao_social", "like", '%'.$filtro->nome.'%');
}
if($filtro->cpf){
$retorno->where("cpf_cnpj", "like", '%'.$filtro->cpf.'%');
}
if($filtro->email){
$retorno->where("email", "like", '%'.$filtro->email.'%');
}
if($paginas>0){
$retorno = $retorno->paginate($paginas);
}else{
$retorno = $retorno->get();
}
return $retorno;
}
Na view index, no formulário do filtro implemente o seguinte:
- nomeie o primeiro input como nome e no value faça a verificação se existe o objetivo $filtro->nome se sim mostre.
- nomeie o segundo input como email e no value faça a verificação se existe o objetivo $filtro->email se sim mostre.
- nomeie o terceiro input como cpf e no value faça a verificação se existe o objetivo $filtro->cpf se sim mostre.
<form>
<div class="mostraFiltro bg-padrao mt-2 p-2 radius-4 border">
<div class="rows center-middle">
<div class="col-3">
<label class="text-label d-block text-branco">Cliente </label>
<input type="text" name="nome" value="{{ $filtro->nome ?? null }}"
class="form-campo" placeholder="Digite aqui..">
</div>
<div class="col-3">
<label class="text-label d-block text-branco">Email </label>
<input type="text" name="email" value="{{ $filtro->email ?? null }}"
class="form-campo" placeholder="Digite aqui..">
</div>
<div class="col-3">
<label class="text-label d-block text-branco">CPF </label>
<input type="text" name="cpf" value="{{ $filtro->cpf ?? null }}"
class="form-campo" placeholder="Digite aqui..">
</div>
<div class="col-2 mt-0 pt-4">
<input type="submit" value="Pesquisar" class="width-100 btn btn-roxo text-uppercase">
</div>
</div>
</div>
</form>
Faça o teste com os filtros
Para fazer o cadastro de cliente será necessário criar duas novas views, Dentro da pasta Cadastro/Cliente faça o seguinte:
- Crie uma view chamada Create.blade.php
- Crie uma view chamada Edit.blade.php
Copie o conteúdo do arquivo frm_cliente para o arquivo Cadastro/Cliente/Create.blade.php, não esqueça envolvê-lo pelos comandos:
@extends('template')
@section('conteudo')
//aqui fica o conteúdo do arquivo
@endsection
configure os input atribuindo a eles na propriedade name o nome igual ao que foi definido na criação da tabela,
também observe os tipos de dados específicos e os que são obrigatórios atribua a propriedade required
<form action="{{ route('cliente.store') }}" method="post">
@csrf
<div class="col-12 mb-4">
<fieldset>
<legend>Pesquisar Por CNPJ</legend>
<div class="rows center-middle">
<div class="col-3 mb-3">
<label class="text-label">Tipo Cliente</label>
<select name="tipo_cliente" id="tipo_cliente" class="form-campo"
onchange="tipoCliente()">
<option value="J">Juridica</option>
<option value="F">Física</option>
</select>
</div>
<div class="col-6 mb-3" id="div_pesquisar">
<label class="text-label">Pesquisa CNPJ</label>
<div class="grupo-form-btn">
<input type="text" id="codigocnpj" class="form-campo mascara-cnpj">
</div>
</div>
<div class="col-3 mt-4 mb-3">
<input type="button" onclick="buscarCNPJ()" value="Pesquisar CNPJ"
class="width-100 btn btn-roxo d-block m-auto">
</div>
</div>
</fieldset>
</div>
<div id="tab-1">
<div class="p-2">
<span class="d-block mt-0 mb-4 border-bottom text-uppercase pb-1">Informações básicas</span>
<div class="rows">
<div class="col-6 mb-3">
<label class="text-label" id="lblRazaoSocial">Razão Social<span
class="text-vermelho">*</span></label>
<input type="text" name="nome_razao_social" id="nome_razao_social" required
value="{{ old('nome_razao_social') }}" class="form-campo">
</div>
<div class="col-6 mb-3" id="divFantasia">
<label class="text-label">Nome Fantasia</label>
<input type="text" name="nome_fantasia" id="nome_fantasia"
value="{{ old('nome_fantasia') }}" id="nome_fantasia" class="form-campo">
</div>
<div class="col-4 mb-3">
<label class="text-label id="lblCnpj">CNPJ<span class="text-vermelho">*</span></label>
<input type="text" name="cpf_cnpj" id="cnpj" value="{{ old('cpf_cnpj') }}"
class="form-campo">
</div>
<div class="col-3" id="div_tipo_contribuinte">
<label class="text-label">Tipo de Contribuinte </label>
<select class="form-campo" name="tipo_contribuinte" id="tipo_contribuinte">
<option value="1" {{ old('tipo_contribuinte') == '0' ? 'selected' : '' }}>1 -
Contribuinte ICMS</option>
<option value="9" {{ old('tipo_contribuinte') == '9' ? 'selected' : '' }}>9 -
Não Contribuinte</option>
<option value="2" {{ old('tipo_contribuinte') == '2' ? 'selected' : '' }}>2 -
Contribuinte Isento</option>
</select>
</div>
<div class="col-3 mb-3">
<label class="text-label">Consumidor Final</label>
<select name="indFinal" id="indFinal" class="form-campo">
<option value="0" {{ old('indFinal') == '0' ? 'selected' : '' }}>Não</option>
<option value="1" {{ old('indFinal') == '1' ? 'selected' : '' }}>Sim</option>
</select>
</div>
<div class="col-2 mb-3">
<label class="text-label" id="lblInscEstadual">Inscrição Estadual</label>
<input type="text" name="rg_ie" maxlength="14" id="rg_ie"
value="{{ old('rg_ie') }}" class="form-campo">
</div>
<div class="col-4 mb-3">
<label class="text-label">Celular:</label>
<input type="text" name="celular" value="{{ old('celular') }}" class="form-campo">
</div>
<div class="col-8 mb-3">
<label class="text-label">Email</label>
<input type="text" name="email" value="{{ old('email') }}"
class="form-campo">
</div>
</div>
</div>
</div>
<div id="tab-2">
<div class="p-2">
<span class="d-block mt-4 mb-4 border-bottom text-uppercase pb-1">Endereço</span>
<div class="rows">
<div class="col-2 mb-3">
<label class="text-label">CEP</label>
<div class="input-grupo">
<input type="text" value="{{ old('cep') }}" name="cep" id="cep"
class="form-campo busca_cep mascara-cep">
</div>
</div>
<div class="col-6 mb-3">
<label class="text-label">Logradouro</label>
<input type="text" name="logradouro" id="logradouro"
value="{{ old('logradouro') }}" class="form-campo rua">
</div>
<div class="col-2 mb-4">
<label class="text-label">Numero</label>
<input type="text" name="numero" id="numero" value="{{ old('numero') }}"
class="form-campo ">
</div>
<div class="col-2 mb-2">
<label class="text-label">UF</label>
<input type="text" name="uf" id="uf" value="{{ old('uf') }}"
class="form-campo estado">
</div>
<div class="col-3 mb-3">
<label class="text-label">Complemento</label>
<input type="text" name="complemento" id="complemento"
value="{{ old('complemento') }}" class="form-campo">
</div>
<div class="col-3 mb-3">
<label class="text-label">Bairro</label>
<input type="text" name="bairro" id="bairro" value="{{ old('bairro') }}"
class="form-campo bairro ">
</div>
<div class="col-4 mb-2">
<label class="text-label">Cidade</label>
<input type="text" name="cidade" id="cidade" value="{{ old('cidade') }}"
class="form-campo cidade">
</div>
<div class="col-2 mb-2">
<label class="text-label">IBGE</label>
<input type="text" name="ibge" id="ibge" value="{{ old('ibge') }}"
class="form-campo ibge">
</div>
</div>
</div>
</div>
<div class="col-12 text-center pb-4">
<input type="submit" value="Salvar" class="btn btn-roxo m-auto">
</div>
</form>
Crie uma função javascript dentro do próprio arquivo, a qual servirá para mudar as labels conforme o tipo de pessoa, ou seja, física ou jurídica
Crie uma função javascript que modifica os labels de acordo com o tipo de pessoa e em seguida chame a função no evento onchage do select tipo_cliente
<script>
function tipoCliente() {
var tp = $("#tipo_cliente").val();
if (tp == "F") {
$("#div_pesquisar").hide();
$("#divIscEstadual").hide();
$("#divSuframa").hide();
$("#divFantasia").hide();
$("#lblInscEstadual").html("RG");
$("#lblCnpj").html('CPF');
$("#lblRazaoSocial").html('Nome');
$("#cnpj").mask('000.000.000-00', {
reverse: true
});
$("#indFinal option:contains(Sim)").attr('selected', true);
$("#tipo_contribuinte option:contains(Não)").attr('selected', true);
} else {
$("#div_pesquisar").show();
$("#divIscEstadual").show();
$("#divSuframa").show();
$("#divFantasia").show();
$("#lblInscEstadual").html("Inscrição Estadual");
$("#lblCnpj").html('CNPJ');
$("#lblRazaoSocial").html('Razão Social');
$("#cnpj").mask('00.000.000/0000-00', {
reverse: true
});
$("#lblCnpj").html('CNPJ');
$("#indFinal option:contains(Não)").attr('selected', true);
$("#tipo_contribuinte option:contains(ICMS)").attr('selected', true);
}
}
</script>
Após fazer a busca pelo cep é preciso configurar os inputs que receberão os dados da busca, para isso faça o seguinte:
- no logradouro, coloque a classe rua
- no UF, coloque a classe estado
- no Bairro, coloque a classe bairro
- no Cidade, coloque a classe cidade
- no IBGE, coloque a classe ibge (esse campo é importante para emissão da nfe)
<div class="col-6 mb-3">
<label class="text-label">Logradouro</label>
<input type="text" name="logradouro" id="logradouro"
value="{{ old('logradouro') }}" class="form-campo rua">
</div>
<div class="col-2 mb-4">
<label class="text-label">Numero</label>
<input type="text" name="numero" id="numero" value="{{ old('numero') }}"
class="form-campo ">
</div>
<div class="col-2 mb-2">
<label class="text-label">UF</label>
<input type="text" name="uf" id="uf" value="{{ old('uf') }}"
class="form-campo estado">
</div>
<div class="col-3 mb-3">
<label class="text-label">Complemento</label>
<input type="text" name="complemento" id="complemento"
value="{{ old('complemento') }}" class="form-campo">
</div>
<div class="col-3 mb-3">
<label class="text-label">Bairro</label>
<input type="text" name="bairro" id="bairro" value="{{ old('bairro') }}"
class="form-campo bairro ">
</div>
<div class="col-4 mb-2">
<label class="text-label">Cidade</label>
<input type="text" name="cidade" id="cidade" value="{{ old('cidade') }}"
class="form-campo cidade">
</div>
<div class="col-2 mb-2">
<label class="text-label">IBGE</label>
<input type="text" name="ibge" id="ibge" value="{{ old('ibge') }}"
class="form-campo ibge">
</div>
Para facilitar os cadastros de empresas, vamos criar uma função que busque os dados de empresa pelo cnpj
Crie um arquivo javascript chamado js_cliente.js dentro da public/assets/js em seguida faça os seguintes procedimentos
no arquivo js_cliente.js, crie uma função chamada buscarCNPJ, a qual deverá receber o cnpj retorne os dados da empresa, a função deverá chamar a rota util/buscarcnpj/cnpj e como retorno deverá preencher os inputs com os dados da empresa
function buscarCNPJ(){
var cnpj = tira_mascara($("#codigocnpj").val());
$.ajax({
url:base_url + "util/buscarcnpj/" + cnpj,
type:"GET",
dataType:"JSON",
data:{},
success:function(data){
fecharModal();
if(data.tem_erro==true){
$("#mostrarUmErro").html(MostrarUmaMsgErro("Erro: " + data.erro));
}else{
preencherDadosCliente(data.retorno);
}
},
error:function(data){
}
});
}
function preencherDadosCliente(data){
$("#nome_razao_social").val(data.razao_social);
$("#nome_fantasia").val(data.nome_fantasia);
$("#numero").val(data.numero);
$("#bairro").val(data.bairro);
$("#complemento").val(data.complemento);
$("#cnpj").val(data.cnpj);
$("#cep").val(data.cep);
$("#logradouro").val(data.logradouro);
$("#cidade").val(data.cidade);
$("#bairro").val(data.bairro);
$("#uf").val(data.uf);
$("#ibge").val(data.ibge);
$("#email").val(data.email);
$("#ultima_atualizacao").val(data.ultima_atualizacao);
$("#data_criacao").val(data.abertura)
}
Crie um controller chamado UtilController
para criar o controller UtilController use o comando: php artisan make:controller UtilController
Dentro do controller UtilController crie um método chamado buscarCNPJ, o qual deverá:
- Receber como parâmetro um CNPJ
- Chamar o método estático buscarCNPJ, o qual deverá fazer a consulta e retornar resultado
- retornar o resultado em forma de json
public function buscarCNPJ($cnpj){
$retorno =new stdClass;
try {
$empresa = UtilService::buscarCNPJ($cnpj);
$retorno->tem_erro = false;
$retorno->retorno = $empresa;
return response()->json($retorno);
} catch (\Throwable $th) {
$retorno->tem_erro =true;
$retorno->erro = $th->getMessage();
return response()->json($retorno);
}
}
Na classe UtilService crie um método chamado buscarCNPJ que faça o seguinte:
- receba o cnpj como parâmetro
- Consuma o endpoint http://receitaws.com.br/v1/cnpj/
- receba os dados enviados, organize os dados referentes à empresa e devolva o resultado
public static function buscarCNPJ($cnpj){
$retorno = enviarGetCurl("http://receitaws.com.br/v1/cnpj/".$cnpj);
$achou = $retorno->cnpj ?? null;
if(!$achou){
throw new \Exception("CNPJ Não encontado");
}
$empresa = new \stdClass();
$empresa->razao_social = $retorno->nome;
$empresa->nome_fantasia = $retorno->fantasia;
$empresa->numero = $retorno->numero;
$empresa->bairro = $retorno->bairro;
$empresa->complemento = $retorno->complemento;
$empresa->cnpj = $retorno->cnpj;
$empresa->cep = tira_mascara($retorno->cep);
$empresa->telefone = $retorno->telefone;
$empresa->email = $retorno->email;
$empresa->abertura = dataen($retorno->abertura);
$empresa->ultima_atualizacao = dataNfe($retorno->ultima_atualizacao) . " " . horaNfe($retorno->ultima_atualizacao) ;
$endereco = enviarGetCurl("https://viacep.com.br/ws/" . $empresa->cep . "/json/");
if($endereco){
$empresa->logradouro= $endereco->logradouro;
$empresa->cidade = $endereco->localidade;
$empresa->bairro = $endereco->bairro;
$empresa->uf = $endereco->uf;
$empresa->ibge = $endereco->ibge;
$empresa->ddd = $endereco->ddd;
}
return $empresa;
}
implemente o método store para receber e salvar os dados do formulário no Banco de dados
Implemente o método store de forma que o mesmo receba os dados do formulário e salve no banco de dados, caso ache necessário use um bloco try/catch
$req = $request->except(["_token"]);
try {
$req["status_id"] = config('constantes.status.ATIVO');
Cliente::Create($req);
return redirect()->route("cliente.index")->with("msg_sucesso", "inserido com sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
Uma boa prática de programação é validar os dados antes de enviá-los para o banco de dados e uma bom recurso que o laravel oferece são os requests.
implemente um request de forma que faça todas as validações necessárias para salvar a informações no banco
No arquivo de request configure as validações necessárias e não esqueça de setar o método authorize para true;
public function rules()
{
$id= $this->segment(2);
$rules= [
"tipo_cliente" => "required",
"nome_razao_social" => "required",
"cpf_cnpj" => "required",
"indFinal" => "required",
"logradouro" => "required",
"numero" => "required",
"bairro" => "required",
"uf" => "required"
];
return $rules;
}
No método store troque o parâmetro Request para ClienteRequest
public function store(ClienteRequest $request)
{
$req = $request->except(["_token"]);
try {
$req["status_id"] = config('constantes.status.ATIVO');
Cliente::Create($req);
return redirect()->route("cliente.index")->with("msg_sucesso", "inserido com sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
}
Teste o sistema fazendo cadastros
Configure o método edit do Controller, com as seguinte ações:
- Busque o cliente pelo id passado no parâmetro e guarde a informação em um array $dados
- no array dados sete a variável clienteJs para true
- chame a view Cliente/Edit passando o array $dados
public function edit($id)
{
$dados["cliente"] = Cliente::find($id);
$dados["clienteJs"] = true;
return View("Cadastro.Cliente.Edit", $dados);
}
Na view edit, copie e cole o conteúdo contido no arquivo edit_cliente.html, este arquivo já está com todas as configurações necessárias, mas caso queira fazer do zero, siga os passo abaixo:
- Copie os dados da view Create
- Configure o elemento form, sistema deve verificar se o objeto cliente existe,
- caso ele exista, no formulário deve ser configurada a rota cliente.update
- caso não exista, no formulário deve ser configurada a rota cliente.store
- Na propriedade value de cada input, faça uma verificação se existe o objeto produto, se existir imprimir o valor do campo correspondente, senão existe imprimir o objeto old()
Implemente o método update de forma que o mesmo receba os dados do formulário e salve no banco de dados, caso ache necessário use um bloco try/catch
public function update(ClienteRequest $request, $id)
{
$req = $request->except(["_token"]);
try {
$cliente = Cliente::find($id);
$cliente->update($req);
return redirect()->route("cliente.index")->with("msg_sucesso", "inserido com sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
}
Faça o teste do seu sistema de forma que o mesmo consiga criar um novo registro e também alterá-lo
implemente o método destroy do Controller, com as seguinte ações:
- Busque o produto pelo id passado no parâmetro
- Caso encontre, exclua a mesma do banco, coloque esta instrução em um bloco try/catch
- Verifique se o campo imagem está preenchido e se tiver, verifique se a imagem existe e caso exista exclua-a
- redirecione para a rota index
public function destroy($id)
{
try {
$cliente = Cliente::find($id);
$cliente->delete();
return redirect()->route("cliente.index")->with("msg_sucesso", "excluido com sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
}
Teste o seu sistema, para que você tenha certeza que está tudo o ok, o sistema deverá:
- Listar todos os cliente
- Criar um cliente novo
- Editar um cliente selecionado
- Excluir um cliente selecionado