Bem vindo ao ff-Core
A ff-core é um biblioteca de código aberto que facilita a vida e aumenta a performance do desenvolvedor. Com poucas linhas e simples de codifica-las você cria um CRUD completo e estável.
Objetivo da ff-Core
Nosso objetivo é criar componentes para os desenvolvedores criarem softwares de alta performance com agilidade para seus clientes.
Exemplo ao vivo
Veja o funcionamento do componente ao vivo. Click aqui!
Requisitos do ff-Core
A ff-core é uma biblioteca em PHP 7.4 utilizando do Framework Codeigniter 4.0.4, Bootstrap 5.0.0 e Javascript.
- Esta biblioteca não é aplicavel a outros Frameworks e outras versões anteriores do Codeigniter.
Suporte ao Banco de Dados Mysql.
Projeto completo ff-Core
Você pode baixar o projeto completo para ser testador. Baixe aqui
A Database se encontra na pasta raiz do projeto para ser importada. db-exemples.sql
.
É importante configurar o arquivo .env com a conexão da base de dados.
Instalação e Configuração da biblioteca ff-Core
CodeIgniter
Via composer
composer create-project codeigniter4/appstarter ffCoreCrud
OU
Download
http://codeigniter.com/download
Biblioteca
Clone o projeto ff-core
Copie a estrutura de pasta para dentro do projeto CodeIgniter ffCoreCrud (Nome do Projeto criado via composer)
As estruruta de pasta sao idênticas para para este proposita em facilitar a copia dos arquivo ff-core-biblioteca para dentro do projeto CodeIgniter.
--app
--Controller
--ibraries
--Models
--Views
--public
--assets
--db-exemples.sql
Configurações
CodeIgniter
No CodeIgniter é importante realizar a configuração do .env
- URL
app.baseURL = 'http://localhost/ffCoreCrud/public'
- DATABASE
database.default.hostname = localhost
database.default.database = exemples
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
Database
Na raíz do projeto encontra-se o script com alguns teste realizado. Nome do arquivo com script é db-exemples.sql.
-
Crie a Database com o nome de Exemples
-
Excute os scripts
No desenvolvimento das tabelas é importante se atentar aos seguintes campos:
-created_at
-updated_at
-deleted_at
Este campos sao obrigatório sua criação para o comportamento da biblioteca funcionar.
Exemplos
1-N
Tabela
CREATE TABLE `escritorios` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cidade` varchar(150) NOT NULL,
`telefone` varchar(50) NOT NULL,
`endereco` varchar(200) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `empregados` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_escritorio` int(11) NOT NULL,
`nome` varchar(150) NOT NULL,
`email` varchar(150) NOT NULL,
`salario` decimal(7,2) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_EMPREGADOS_ESCRITORIOS` (`id_escritorio`),
CONSTRAINT `FK_EMPREGADOS_ESCRITORIOS` FOREIGN KEY (`id_escritorio`) REFERENCES `escritorios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
Código Fonte
public function Escritorios()
{
$Ct = new Controlador($this);
$Ct->tabela = 'escritorios';
$Ct->nome = 'Escritórios';
$Ct->titulo = 'Cadastrar de Escritórios';
$Ct->displayAsFiltro([
'cidade' => 'Cidade'
]);
$Ct->displayAsGride([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsView([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsDelete(true);
$Ct->displayAsLink([
'/Exemples/Funcionarios' => 'Funcionários'
]);
return $Ct->show();
}
public function Funcionarios($id){
$Ct = new Controlador($this);
$Ct->tabela = 'empregados';
$Ct->nome = 'Funcionário';
$Ct->titulo = 'Cadastrar de Funcionários';
$Ct->displayAsFiltro([
'email' => 'E-mail'
]);
$Ct->displayAsGride([
'id' => 'Id',
'nome' => 'Nome',
'email' => 'E-mail',
'salario' => 'Salário'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'nome' => 'Nome',
'email' => 'E-mail',
'salario' => 'Salário'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'nome' => 'Nome',
'email' => 'E-mail',
'salario' => 'Salário'
]);
$Ct->displayAsView([
'id' => 'Id',
'nome' => 'Nome',
'email' => 'E-mail',
'salario' => 'Salário'
]);
$Ct->displayAsDelete(true);
$Ct->fieldNameDefaultValue(['id_escritorio' => $id]);
$Ct->where(['id_escritorio' => $id]);
return $Ct->show();
}
N-N
Tabela
CREATE TABLE `atores` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `filme` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titulo` varchar(255) NOT NULL,
`ano` varchar(4) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `filme_atores` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_filme` int(11) NOT NULL,
`id_atores` int(11) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_FILME` (`id_filme`),
KEY `FK_ATORES` (`id_atores`),
CONSTRAINT `FK_ATORES` FOREIGN KEY (`id_atores`) REFERENCES `atores` (`id`),
CONSTRAINT `FK_FILME` FOREIGN KEY (`id_filme`) REFERENCES `filme` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Código Fonte
public function Filmes(){
$Ct = new Controlador($this);
$Ct->tabela = 'filme';
$Ct->nome = 'Filmes';
$Ct->titulo = 'Cadastrar Filmes';
$Ct->displayAsFiltro([
'ano' => 'Ano'
]);
$Ct->displayAsGride([
'id' => 'Id',
'titulo' => 'Título',
'ano' => 'Ano'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'titulo' => 'Título',
'ano' => 'Ano'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'titulo' => 'Título',
'ano' => 'Ano'
]);
$Ct->displayAsView([
'id' => 'Id',
'titulo' => 'Título',
'ano' => 'Ano'
]);
$Ct->displayAsDelete(true);
$Ct->displayAsLink([
'/Exemples/FilmAtoresView' => 'Atores do Filme'
]);
return $Ct->show();
}
public function Atores(){
$Ct = new Controlador($this);
$Ct->tabela = 'atores';
$Ct->nome = 'Atores';
$Ct->titulo = 'Cadastrar de Atores';
$Ct->displayAsFiltro([
'nome' => 'Nome'
]);
$Ct->displayAsGride([
'id' => 'Id',
'nome' => 'Nome'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'nome' => 'Nome'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'nome' => 'Nome'
]);
$Ct->displayAsView([
'id' => 'Id',
'nome' => 'Nome'
]);
$Ct->displayAsDelete(true);
$Ct->displayAsLink([
'/Exemples/AtoresFilmeView' => 'Filmes do Atores'
]);
return $Ct->show();
}
public function FilmeAtores(){
$Ct = new Controlador($this);
$Ct->tabela = 'filme_atores';
$Ct->nome = 'Filme por Atores';
$Ct->titulo = 'Cadastrar Atores por Filme';
$Ct->displayAsGride([
'id' => 'Id',
'id_filme' => 'Filme',
'id_atores' => 'Ator'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'id_filme' => 'Filme',
'id_atores' => 'Ator'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'id_filme' => 'Filme',
'id_atores' => 'Ator'
]);
$Ct->displayAsView([
'id' => 'Id',
'id_filme' => 'Filme',
'id_atores' => 'Ator'
]);
$Ct->displayAsDelete(true);
$Ct->addReferencesKey('id_filme', 'filme', 'id', 'titulo', []);
$Ct->addReferencesKey('id_atores', 'atores', 'id', 'nome', []);
return $Ct->show();
}
- Observação: As funções devem serem colocar dentro da classe controller conforme a documentação do Codeigniter.
Exemplos de Callback
Eventos de Insert, Update e Delete
Os eventos de Insert, Update e Delete ganharam os eventos de callback para befere e after Insert, Update e Delete. Abaixo segue o exemplo de sua utilização.
public function Escritorios()
{
$Ct = new Controlador($this);
$Ct->tabela = 'escritorios';
$Ct->nome = 'Escritórios';
$Ct->titulo = 'Cadastrar de Escritórios';
$Ct->displayAsFiltro([
'cidade' => 'Cidade'
]);
$Ct->displayAsGride([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsAdd([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsEdit([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsView([
'id' => 'Id',
'cidade' => 'Cidade',
'telefone' => 'Telefone',
'endereco' => 'Endereço'
]);
$Ct->displayAsDelete(true);
$Ct->displayAsLink([
'/Exemples/Funcionarios' => 'Funcionários'
]);
$Ct->callbackBeforeInsert(array($this, 'beforeInsertEscritorio'));
$Ct->callbackBeforeUpdate(array($this, 'beforeUpdateEscritorio'));
$Ct->callbackAfterInsert(array($this, 'logInsertAfterEscritorio'));
$Ct->callbackAfterUpdate(array($this, 'logUpdateAfterEscritorio'));
$Ct->callbackAfterDelete(array($this, 'logDeleteAfterEscritorio'));
return $Ct->show();
}
public function beforeInsertEscritorio($post_array){
$post_array['cidade'] = strtoupper($post_array['cidade']);
return $post_array;
}
public function beforeUpdateEscritorio($post_array){
$post_array['cidade'] = strtoupper($post_array['cidade']);
return $post_array;
}
public function logInsertAfterEscritorio($post_array, $primarykey){
$this->db = \Config\Database::connect();
$values = print_r($post_array, true);
$data = [
'tabela' => 'escritorios',
'evento' => 'insert',
'values' => $values,
'chave' => $primarykey
];
$this->db->table('log')->insert($data);
return true;
}
public function logUpdateAfterEscritorio($post_array, $primarykey){
$this->db = \Config\Database::connect();
$values = print_r($post_array, true);
$data = [
'tabela' => 'escritorios',
'evento' => 'update',
'values' => $values,
'chave' => $primarykey
];
$this->db->table('log')->insert($data);
return true;
}
public function logDeleteAfterEscritorio($primarykey){
$this->db = \Config\Database::connect();
$data = [
'tabela' => 'escritorios',
'evento' => 'delete',
'chave' => $primarykey
];
$this->db->table('log')->insert($data);
return true;
}
Uso da Classe Controlador
Uso do Objeto Controlador
$Ct = new Controlador($this);
Propriedades
As propritedas são obrigatórios para realizarem as configuração de tela e banco de dados.
$Ct->tabela;
$Ct->nome;
$Ct->titulo;
Funções
- displayAsGride
- Tem como objetivo configurar as colunas da Gride. Através do array associativo é informado o nome do campo da tabela e o nome de exibição na Gride.
$Ct->displayAsGride(array);
- Tem como objetivo configurar as colunas da Gride. Através do array associativo é informado o nome do campo da tabela e o nome de exibição na Gride.
- displayAsAdd
- Tem como objetico configurar as colunas no formulário de adição. Através do array associativo é informado o nome do campo da tabela e o nome de exibição na label.
- Se não informado esta função não é apresentado também seu respctivo botão de adicionar.
$Ct->displayAsAdd(array);
- displayAsEdit
- Tem como objetico configurar as colunas no formulário de edição. Através do array associativo é informado o nome do campo da tabela e o nome de exibição na label.
- Se não informado esta função não é apresentado também seu respctivo botão de editar na gride na coluna de Ação.
$Ct->displayAsEdit(array);
- displayAsView
- Tem como objetico configurar as colunas no formulário de visualização. Através do array associativo é informado o nome do campo da tabela e o nome de exibição na label.
- Se não informado esta função não é apresentado também seu respctivo botão de visualizar na gride na coluna de Ação.
$Ct->displayAsView(array);
- displayAsDelete
- Tem como objetico configurar as colunas no formulário de deleção.
- Se não informado esta função ou passado o parametro False não é apresentado também seu respctivo botão de deletar na gride na coluna de Ação.
- O delete é feito atrávez da chave primária.
$Ct->displayAsView(bool True|False);
- addReferencesKey
- O objetivo é onde existir a referencia será apresentado a ligação com a Coluna de Exibição da Tabela Referenciada. E onde é formulário trazer linhas desta tabela Referenciada.
$Ct->addReferencesKey(Coluna Referencia, Tabela Referenciada, Coluna PK Referenciada, Coluna de Exibição Referenciada, Where = []);
- O objetivo é onde existir a referencia será apresentado a ligação com a Coluna de Exibição da Tabela Referenciada. E onde é formulário trazer linhas desta tabela Referenciada.
- fieldNameDefaultValue
- É utilizada para deixar em seus formulários o campo com um valor default. Através do array associativo é informado o nome do campo e o valor default.
$Ct->fieldNameDefaultValue(array);
- É utilizada para deixar em seus formulários o campo com um valor default. Através do array associativo é informado o nome do campo e o valor default.
- where
- É utilizada para criar alguma condição no filtro da Gride. Através do array associativo é informado o nome do campo e o valor do filtro.
$Ct->where(array);
- É utilizada para criar alguma condição no filtro da Gride. Através do array associativo é informado o nome do campo e o valor do filtro.
- show
- É através desta função que renderizado toda a configuração e coloca em HTML para ser manda na view Cadastro que esta recepcionando.
return $Ct->show();
- É através desta função que renderizado toda a configuração e coloca em HTML para ser manda na view Cadastro que esta recepcionando.
Duvidas ou Contato
Para duvidas ou contato segue alguns canais de comunicação.
E-mail: ffcore.contato@gmail.com
E-mail: matheusnarciso@hotmail.com
Skype: matheusmell0
Sobre mim: matheusmello.info