Crie o model Certificado Digital
para criar o model Certificado Digital use o comando: php artisan make:model CertificadoDigital -m
adicione os seguintes campos:
- nome_arquivo varchar(100)
- arquivo_binario binary
- senha varcha(80)
- cnpj varchar(60)
- serial varchar (80)
- inicio varchar(80)
- expiracao varchar(80)
- idctx varchar(180)
- csc varchar(80)
- csc_id varchar(60)
Schema::create('certificado_digitals', function (Blueprint $table) {
$table->id();
$table->string('nome_arquivo', 100)->nullable();
$table->binary('arquivo_binario')->nullable();
$table->string('senha', 60)->nullable();
$table->string('cnpj', 80)->nullable();
$table->string('serial', 80)->nullable();
$table->string('inicio', 80)->nullable();
$table->string('expiracao', 80)->nullable();
$table->string('idctx', 200)->nullable();
$table->string('csc', 80)->nullable();
$table->string('csc_id', 80)->nullable();
$table->timestamps();
});
Crie um controller de recursos chamado CertificadoDigital, para que o projeto fique mais organizado salve o controller numa pasta chamada NotaFiscal
No controller CertificadoDigitalController implemente o método index, o qual deverá:
- pegar a lista de certificados e colocar um array
- chamar a view CertificadoDigital/Index com o array criado com a lista de certificados
$dados["lista"] = CertificadoDigital::get();
return view("NotaFiscal.CertificadoDigital.Index", $dados);
Crie a view para o Certificado Digital
Dentro da pasta resources/view crie uma pasta chamada de NotaFsical e dentro de NotaFsical crie uma outra chamada de CertificadoDigital e dentro da pasta CertificadoDigital crie um arquivo chamado Index.blade.php
Copie o conteúdo do arquivo lst_certificado para o arquivo NotaFiscal/CertificadoDigital/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 o certificado
- 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->certificado_nome_arquivo }}</td>
<td align="left">{{ $l->cnpj }}</td>
<td align="center">{{ $l->inicio }}</td>
<td align="center">{{ $l->expiracao }}</td>
<td align="center"><a href="{{ route('certificadodigital.edit', $l->id) }}"
class="d-inline-block btn btn-verde btn-circulo btn-pequeno" title="Editar"><i
class="fas fa-edit"></i></a></td>
<td align="center">
<a href="#"
onclick="confirm('Tem Certeza?') ? document.getElementById('apagar{{ $l->id }}').submit() : '';"
class="d-inline-block btn btn-vermelho btn-circulo btn-pequeno"
title="Excluir"><i class="fas fa-trash-alt"></i></a>
<form action="{{ route('certificadodigital.destroy', $l->id) }}" method="POST"
id="apagar{{ $l->id }}">
<input type="hidden" name="_method" value="DELETE">
{{ csrf_field() }}
</form>
</td>
</tr>
@endforeach
Implemente o método create do controller CertificadoDigitalController com as seguintes ações:
- no array dados sete a variável certificadodigitalJs para true
- chame a view Produto/Create passando o array $dados
$dados["certificadodigitalJs"] = true;
return view("NotaFiscal.CertificadoDigital.Create", $dados);
Para fazer o cadastro de Certificado Digital será necessário criar uma nova view, Dentro da pasta NotaFiscal/CertificadoDigital faça o seguinte:
- Crie uma view chamada Create.blade.php
Copie o conteúdo do arquivo frm_produto para o arquivo NotaFiscal/CertificadoDigital/Create.blade.php, não esqueça envolvê-lo pelos comandos:
@extends('template')
@section('conteudo')
//aqui fica o conteúdo do arquivo
@endsection
Configure o elemento form da view Create, com as seguintes ações:
- Setar a rota certificadodigital.store na propriedade action do form
- Setar o método post na propriedade method do form
- setar a propriedade enctype para multipart/form-data
- implementar o helper @csrf dentro do form
<form action="{{ route('certificadodigital.store') }}" method="POST" enctype="multipart/form-data">
@csrf
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
<div class="col-3 mb-3">
<label class="text-label">CNPJ</label>
<input type="text" name="cnpj" required
value="{{ isset($certificado->cnpj) ? $certificado->cnpj : old('cnpj') }}"
class="form-campo">
</div>
implemente o método store para receber e salvar os dados do formulário no Banco de dados
Caso não tenha conseguido fazer, segue o código completo
try {
$req = $request->except(["_token","arquivo"]);
if ($request->hasFile('arquivo') && $request->arquivo->isValid()) {
$req["arquivo_binario"] = file_get_contents($_FILES["arquivo"]["tmp_name"]);
}
CertificadoDigital::Create($req);
return redirect()->route("certificadodigital.index")->with("msg_sucesso", "Registro 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
Teste o sistema fazendo cadastros
Configure o método edit do Controller, com as seguinte ações:
- Busque o certificado digital pelo id passado no parâmetro e guarde a informação em um array $dados
- chame a view Produto/Edit passando o array $dados
$dados["certificadodigital"] = CertificadoDigital::find($id);
return view("NotaFiscal.CertificadoDigital.Create", $dados);
Configure os dados do formulário para ediçao dos dados
Configure o elemento form da view Index, com as seguintes ações:
- o sistema deve verificar se o objeto certificadodigital existe,
- caso ele exista, no formulário deve ser configurada a rota certificadodigital.update
- caso não exista, no formulário deve ser configurada a rota certificadodigital.store
@if (isset($certificadodigital->id))
<form action="{{ route('certificadodigital.update', $certificadodigital->id) }}" method="POST"
enctype="multipart/form-data">
<input name="_method" type="hidden" value="PUT" />
@else
<form action="{{ route('certificadodigital.store') }}" method="Post" enctype="multipart/form-data">
@endif
@csrf
na propriedade value de cada input, faça uma verificação se existe o objeto naturezaoperacao, se existir imprimir o valor do campo correspondente, senão existe imprimir o objeto old()
<div class="col-3 mb-3">
<label class="text-label">CNPJ</label>
<input type="text" name="cnpj" required
value="{{ isset($certificadodigital->cnpj) ? $certificadodigital->cnpj : old('cnpj') }}"
class="form-campo">
</div>
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
try {
$req = $request->except(["_token", "_method"]);
if ($request->hasFile('arquivo') && $request->arquivo->isValid()) {
$req["arquivo_binario"] = file_get_contents($_FILES["arquivo"]["tmp_name"]);
}
CertificadoDigital::find($id)->update($req);
return redirect()->route("certificadodigital.index")->with("msg_sucesso", "Registro inserido com sucesso");
} catch (\Throwable $th) {
return redirect()->back()->with("msg_erro", "Erro: " . $th->getMessage());
}
Teste o seu sistema
implemente o método destroy do Controller, com as seguinte ações:
- Busque a certificado digital pelo id passado no parâmetro
- Caso encontre, exclua a mesma do banco, coloque esta instrução em um bloco try/catch
- redirecione para a rota index
try {
$obj = CertificadoDigital::find($id);
if($obj){
$obj->delete();
}
return redirect()->route("certificadodigital.index")->with("msg_sucesso", "Registro Excluído com sucesso");
} catch (\Throwable $th) {
return redirect()->route("certificadodigital.index")->with("msg_aviso", "Não foi possível excluir este registro");
}
Teste o sistema