O meu primeiro Framework PHP está morto, mas o sistema escrito com ele está vivo!

Valdiney França
Feb 23, 2017 · 5 min read

Hoje eu vou escrever sobre o motivo que me levou a desenvolver o meu primeiro Framework php lá em 2015! Tá, mas se foi escrito em 2015, e está morto, por qual motivo, razão, circunstâncias você está escrevendo sobre ele? Pois é, eu já não faço commits no repositório dele no Github faz alguns meses e até então eu sou a unica pessoa a usa-lo! “Pelo menos para desenvolvimento”!

Pois bem, eu escrevi esse Framework com o puro intuito acadêmico! O meu desejo era realmente aprender mais sobre o PHP e MVC por via do desenvolvimento do Ofir, “esse é o nome do Framework”!

Cara, foi uma aventura bem prazerosa!

Sim, foi do caralho! Tive que pensar em como escrever a class de banco de dados, que por sinal me deu uma dor de cabeça inicialmente, pois eu abria uma conexão com o banco e nunca fechava! Uma hora a porra pipocou de tantas conexões sendo usadas ao mesmo tempo! Resolvi o problema usando o padrão de projeto Singleton que basicamente: “ Permite criar objetos únicos para os quais há apenas uma instância”.

Tive que pensar em como criar os Controllers, como criar os Models, como criar as Views e como carregar tudo isso de forma que eu não tivesse que configurar praticamente nada no momento de usa-los. Para isso eu criei um arquivo de boot que era responsável por carregar tudo que eu usaria no projeto, incluindo as dependências principais. Esse arquivo era muito importante, pois nele eu instanciava os Controllers que eram chamados na URL, instanciava os Models e os Services. Cara, eu queria imitar o Laravel. Risos!!!! Por isso, eu passava os Models e Services como dependência direto no construtor dos Controllers no momento da instanciação do mesmo! Não que o Laravel faça desta forma! Mas para simular a forma com que é acessado os Models de dentro do Controller no Laravel, eu tive que fazer dessa maneira! Pelo menos foi como eu arquitetei na época. Então basicamente por via do Construtor do Controller eu recebia um Array de Models e um Array de Services! “Háaa eu já recebia eles instanciados”! Algo bem assim:

class User_Controller extends Controller 
{
protected $user;
protected $view;

public function __construct(Array $models, Array $services)
{
$this->user = $models['User'];
$this->view = $this->view();
}

public function index()
{
$users = $this->user->select()->get_all();
return $this->view->make('home.index', compact('users'));
}
}

Acesso ao Banco de dados por via dos Models

Sim, Valdiney, mas como você fazia para acessar o Banco de dados por via dos Models? Bem, eu fiz uma classe chamada Persistence que recebe como injeção de dependência uma instancia do objeto PDO! E o meu Model base extends de Persitence. Desta forma, todos os meus Models estendiam de Model e conseguiam acessar tranquilamente o banco por via do Atributo “db” que retorna um Objeto PDO. A minha classe Persitence também tinha o dever de abstrair o uso do SQL. Sim, ela fazia muitas coisas, mas vamos lá! Eu tinha métodos como Select, Insert, Update, Delete Find, Find by, Join… Na real, facilitava a minha vida! Opa, ainda facilita! O meu método Insert que na verdade se chama Save, recebe um Array associativo contendo os mesmos nomes dos campos da tabela que eu desejava inserir dados! O mesmo acontecia com o meu Update. Algo bem assim:

# Salvando os dados na tabela Cliente$data['nome'] = Input::in_post('nome');  
$data['sobre_nome'] = Input::in_post('sobre_nome');
$data['email'] = Input::in_post('email');
$this->cliente->save($data);# Editando os dados na tabela Cliente$data['nome'] = Input::in_post('nome');
$data['sobre_nome'] = Input::in_post('sobre_nome');
$data['email'] = Input::in_post('email');
$cliente = $this->cliente->find($id_cliente);
$this->cliente->update($data, $cliente['id']);

Meus Helpers

Cara, eu criei um monte de Helpers para resolver pequenas necessidades internas, e fiz tudo isso por via de Trait. “São como classes, porém não precisam ser instanciadas para gerar um objeto”! Por via dessas Trait´s eu criava métodos abstratos e usava para saciar as minhas vontades! Risos!! Criei Trait para Input, em outras palavras usava o $_POST e $_GET por trás, mas eu usava Input::in_post(‘’); Input::in_get(‘’); Criei Helper para trabalhar com data, Session e muito mais!!

Meu Auth, ou seja, meu Trait para autenticação

Eu conseguia fazer um sistema de login facilmente usando o Auth e já contia métodos para verificar se o usuário existia, se o login era único, fazer logout! Algo bem assim:

# Verificando credenciais para efetuar login$data_login['login'] = Input::in_post('login');
$data_login['password'] = Input::in_post('password');
if ($this->usuario->user_exist($data_login)) {...}

Meus Layouts

Com apenas uma linha no meu Controller eu conseguia dizer qual layout determinado método iria usar ao carregar uma View! Em outras palavras eu conseguia renderizar uma view dentro de um layout qualquer! Era lindo!

Proteção de Rotas

Bom, eu tinha que proteger as rotas para que o sistema de login funcionasse de forma segura! Para isso eu criei uma class chamada private_areas com métodos para proteger Controllers e para proteger métodos! Bastava passar um Array contento os nomes dos Controllers que eu queri proteger e como queria proteger, isso poderia ser levando-se em consideração o perfil do usuário…

O sistema comercial escrito com o Ofir

Depois de falar até que bastante do Ofir, está na hora de falar um pouco do sistema comercial que eu escrevi com ele. No primeiro mês de 2016 eu recebi a proposta de uma empresa para a escrita de um sistema para realizar Marketing por via do Wifi utilizando em conjunto o Mikrotik e o Free Radius! Dentre vários Frameworks respeitados e produtivos no mercado, eu fui justamente usar o meu Frankenstein! Risos!! Confesso que muitas coisas seriam mais simples por uso de outras ferramentas, mas até que foi bem tranquilo o desenvolvimento! Hoje o sistema está com 1 ano e dois meses, rodando em vários clientes de forma suave e o melhor! Atendendo as necessidades!

O Framework morreu? Pois faz tempo que não commito nenhuma nova feature no Github, mas na verdade é que ele continuará vivo até que não exista mais nenhuma aplicação rodando com ele. Algo que não vai acontecer por agora! Pois o sistema só cresce a cada dia mais e até agora o Framework não apresentou limitações, pois você estende como necessitar! Foi uma boa ter escrito um sistema comercial com ele? Eu digo que sim! Poderia ter sido melhor se fosse com outro? Poderia ou não! Depende muito do desenvolvedor, pois é possível fazer merda com tudo que é ferramenta! Escreveria um novo sistema com ele? Não, usaria um Framework de mercado…

Hoje o nosso maior cliente recebe mais de 8 mil visitas por mês, pois trata-se de um pequeno Shopping aqui na cidade de Salvador! E mesmo tendo escrito o Ofir o patinho feio me sinto orgulhoso, pois através dele eu pude construir uma ferramenta que agrega valor aos nossos clientes e disponibiliza um bom serviço aos clientes dos nossos clientes em Shoppings, clinicas, restaurantes, lanchonetes de posto e muito mais!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade