/liberty

Modelo MVC da liberty - Criado e desenvolvido por Lucas Brito

Primary LanguagePHP

liberty

Modelo MVC da liberty - Criado e desenvolvido por Lucas Brito

Liberty MVC é a utilização do modelo MVC (Model-View-Controller) em projetos de código PHP. Utilizando de código Orientando a Objetos, o
programador tem a performace de código limpo e fácil de realizar qualquer tipo de modificação

Estrutura

A estrutura do liberty é a seguinte:

  • conf/ => Utilizado para configurações, arquivos .ini
  • conf/conf.ini => Utilizado para configurações iniciais. Inicialmente de banco de dados
  • controller/ => Diretório onde contém as classe que controlam o código do programador
  • bases/ => Utilizado para guardar classes que controlam utilização de banco de dados nas suas especificas tabelas
  • public/ => Diretório onde encontra-se a pasta do usuário, ou seja, o que seja publico ao mesmo. Neste diretório, pode colocar as pastas
    assets, ou seja: "scripts";"folhas de estilo (css)";"imagens";"fonts".(É aconselhavel que na configuração do servidor apache, a pasta inicial,
    seja a "public", para que o usuário somente tenha acesso aos dados que estão na "public")
  • lib/ => Pasta de biblioteca da liberty (não modificar)
  • views/ => Pasta de views que serão o conteudo de cada controller para ser mostrado aos usuários
  • layout/ => Pasta onde contém os layouts da página
  • bin/ => Pasta de código executavel

Configuração por parte do desenvolvedor

É aconselhavel que você coloque o diretório liberty/bin no "PATH" do seu sistema operacional
Linux:

  vim ~/.bashrc # Abrir o bashrc do usuário
PATH=$PATH:/diretorio/liberty/bin/ # Adiciona linha em .bashrc e depois salvar o arquivo e sair
bash # Executar para atualizar no bash atual

Criando projeto

Para criar projeto liberty, utilize o seguinte código:

    mkdir pasta # pasta onde deve ficar o sistema
    cd pasta# entra na pasta
    lb.php create project # cria projeto no diretorio atual
  

O script lb.php encontra-se no diretorio "bin/" ele é utilizado para facilitar a criação das funções do liberty

Configurando Projeto

Para configurar o projeto, após ser criado, entre no arquivo "conf/conf.ini", onde o mesmo é utilizado inicialmente para configuração do PDO. Com os seguintes parametros configure (Retirando o comentário inicial ";"):

[database]
adapter=mysql ;Adaptador do banco de dados (Drivers PDO(mysql,pgsql,dlib))
host=localhost ;Endereço do banco de dados
user=root ;Usuário do banco de dados
pass=admin ;Senha do usuário do banco de dados
dbname=db ;Nome do banco de dados
port=3306 ;Porta de conexão do banco de dados

Como funciona a requisisão pelo usuário

Quando o usuário solicita o endereço, por exemplo:
http://localhost/public/?go=home&action=mostrar
acontece o seguinte:

  1. O Servidor acessa "public/index.php" com os seguintes parametros:
    1. go = home
    2. action = mostrar
  2. O Index trata os parametros, traduzindo-os:
    1. go = controller
    2. action = ação
  3. O public/index.php chama o controller (home)
  4. Imprime na tela o layout padrão (Caso não seja solicitado para não imprimir)
  5. Executa as ações do método init() do controller
  6. Acessa a action (mostrar)
  7. Executa as ações da "action" (mostrar)
  8. Acessa e imprime a view da action do controller (views/Home/mostrar.phtml)

Controllers

Para criar controllers(que no caso são as páginas carregadas pelo método GET "go") utiliza-se o seguinte código abaixo:
lb.php create controller "meuControlador"
Quando criado o controller, o código poderá ser acessado:
controller/MeuControlador_Controller.php
Onde o mesmo apresentará o seguinte código:

<?php
/**
 * MeuControlador
 * @author Nome <email@servidor.com.br>
 */
class MeuControlador_Controller extends Lb_Controllers{

    	public function init(){
	    }

	    public function index(){
      }	
}
?>

Ao criar controller é automaticamente criado uma action chamada index (Views/MeuControlador/index.phtml), quando o usuário acessar "http://localhost/public/?go=meuControlador" (sem enviar o valor "action") é carregada a ação "index"

Utilizando Controllers+Views(o que vai ser mostrado ao usuário):
controller/MeuControlador_Controller.php:

<?php
/**
 * MeuControlador
 * @author Nome <email@servidor.com.br>
 */
class MeuControlador_Controller extends Lb_Controllers{

    	public function init(){
    	  $this->texto = "Meu nome é:";
	    }

	    public function index(){
	      $this->nome = "Lucas Brito";
      }	
}
?>

Views/MeuControlador/index.phtml

<?php
  print "Olá Mundo!<br>";
  print $this->texto."<br>";
  print $this->nome;
?>

Resultado:

Olá Mundo
Meu nome é....
Lucas Brito

Quando iniciamos solicitando a url http://localhost/public/?go=meuControlador o liberty carrega primeiro o método init() logo após o método index() e imprimindo com o layout. Quando criamos uma variavel utilizando $this->variavel = "0"; ela automaticamente fica acessável para todo a base atual (Actions do Controller / Views / Layout)

Criando Action(Ações)

Para criar actions você utiliza o seguinte codigo

lb.php create action minha_action meuControlador "Documentação"

Onde resulta em:

<?php
/**
 * MeuControlador
 * @author Nome <email@servidor.com.br>
 */
class MeuControlador_Controller extends Lb_Controllers{

    	public function init(){
    	  $this->texto = "Meu nome é:";
	    }

    public function index(){
      $this->nome = "Lucas Brito";
      	}
      	/**
      	* Documentação
      	**/
      	public function minha_action(){
      	}
}
?>

É também criado uma view em views/MeuControlador/minha_action.phtml para visualização do usuário. Para que o usuário possa acessar a action o endereço digitado seria:
http://localhost/public/?go=meuControlador&action=minha_action

Métodos utilizáveis tanto pelas actions,views,layout

$this->getController() => Retorna nome do controller atual
$this->getAction() => Retorna nome da action atual
$this->no_layout() => Diz ao código que não vai ser impresso o layout, somente a view
$this->content() => Retorna o conteudo (Utilizado no Layout)
$this->setHeader($tag,$href) => Seta novo elemento(script,link) no cabeçalho (Deve-se usar o comando 'print $this->getHeader();' no layout).Ex:

// Seta inclusão de código jquery.min.js que encontra-se em assets/js/jquery.min.js
$this->setHeader('script','assets/js/jquery.min.js');
// Seta inclusão do css all.css que encontra-se em assets/css/all.css
$this->setHeader('style','assets/css/all.css');


$this->setScript($href) => Seta novo script no cabeçalho (Deve-se usar o comando 'print $this->getHeader();' no layout)

// Seta inclusão de código jquery.min.js que encontra-se em assets/js/jquery.min.js
$this->setScript('assets/js/jquery.min.js');


$this->setStyle($href) => Seta novo style ao cabeçalho (Deve-se usar o comando 'print $this->getHeader();' no layout)

// Seta inclusão do css all.css que encontra-se em assets/css/all.css
$this->setStyle('assets/css/all.css');


$this->getHeader() => Retorna codigos setados no cabeçalho (Usar somente no layout)

$this->url(Array $url) => Cria e retorna url para o código.

// Cria url
$url_1 = $this->url(array("controller"=>"meu_controller","action"=>"home")); 
$url_2 = $this->url(array("controller"=>"meu_controller"));
$url_3 = $this->url(array("action"=>"home"));
$url_4 = $this->url(array("controller"=>"meu_controller","action"=>"cadastro","idade"=>19,"nome"=>"Lucas","sobrenome"=>"Brito"));

// Retorna index.php?go=meu_controller&action=home (controller e "go" tem a mesma função)
print $url_1;
// Retorna index.php?go=meu_controller&action=index (Quando não enviado action, assume como index)
print $url_2;
// Retorna index.php?go=meu_controller&action=home (Quando não enviado controller assume o controller atual)
print $url_3;
// Retorna index.php?go=meu_controller&action=cadastro&idade=19&nome=Lucas&sobrenome=Brito (Quando enviado outros parametros no array, assume como novos valores do método $_GET
print $url_4;

$this->redirect($url) => Redireciona a página ```php // Redireciona para meu_controller na action home $this->redirect($this->url(array("controller"=>"meu_controller","action"=>"home"))); ```
$this->_POST($name,$protect=true) | $this->_GET($name,$protect = true) => Retorna um valor POST/GET enviado pelo formulário. O protect é usuado caso não queira proteger a string(no casso de array deve-se colocar false, pois o padrão é true) contra sql injection ```php $nome = $this->_POST("nome"); $id = $this->_GET("id"); $array = $this->_POST("array",false); ```
$this->set_session($name,$value) => Grava um valor na sessão do navegador
$this->get_session($name) => Retorna valor da sessão gravada no navegador ```php // Grava sessão com o campo "nome" e seu valor "Lucas Brito" $this->set_session("nome","Lucas Brito"); // Imprime "Meu nome é :Lucas Brito" print "Meu nome é :".$this->get_session("nome"); ```
$this->render($_page) => Renderiza uma view de qualquer controller
views/Index/index.phtml ```php // Alem de mostrar index faz uma inclusão de Index/outra.phtml $this->render("Index/outra.phtml"); ```

$this->getMessage($text) => Mostra uma mensagem de alerta (Javascript) na tela
Controller/Salvar_Controller.php

public function salvar(){
	// Da uma mensagem na tela
	$this->getMessage("Salvo com sucesso");
	// Redireciona a página
	$this->redirect($this->url(array("controller"=>"index","action"=>"index")));
}

# Criando Base(Base para consulta em tabelas do banco de dados) Para criar base de dados onde realiza consulta na tabela do banco de dados use o seguinte código:
lb.php create base minhaBase nometabela id_primary
Onde serão passados os parametros de nome da base de dados nome da tabela e nome da chave primaria

Com o uso de base (sendo que o PDO já deve estar configurado no arquivo conf/config.ini) você tem acesso mais rápido a consultas, edições, inserções na tabela especifica, de uma forma mais simples e rápida.

Para chamar uma base utilize a seguinte forma (é aconselhavel iniciar as bases nos métodos init() do controller pois terá acesso em qualquer action) (Passe o parametro $this->_pdo para iniciar a construção com pdo) ```php MinhaBase = new minhaBase_Base($this->_pdo); // ou (sem passar o parametro de conexão, pois utiliza o padrão) $this->MinhaBase = new minhaBase_Base(); // ou (passando a constante criada por lb.php base add) $this->MinhaBase = new Lb_Bases(Lb_Tables::$minhaBase); } public index(){ count ($this->MinhaBase->fetch()); // Retorna numeros de linhas } } ?> ``` # Metodos utilizados por Lb_Bases

$this->MinhaBase->fetch($where,$order,$cols,$limit,$group) => Retorna todas as linhas (PDO::fetchAll(PDO::FETCH_ASSOC)) da tabela (Caso não seja passado nenhum comando no primeiro argumento $where)
Exemplo:

public index(){
     /**
		Parametros
	     * @param mixed $where Condição
	     * @param string $order Ordem
	     * @param mixed $cols Colunas que devem ser exibidas (Array,String)
	     * @param int $limit limite
	     * @param mixed $group Agrupamento de consulta (Array,String)
	     
        */
	$this->MinhaBase->fetch(); // Todas as linhas
	$this->MinhaBase->fetch("nome='Lucas' AND sobrenome='Brito'"); // Somente os que contiverem nome e o sobrenome
	$this->MinhaBase->fetch("idade=15","idade desc,sexo asc"); // Todas as idades 15 e ordenando por idade e sexo
	$this->MinhaBase->fetch(null,"idade desc"); => Todas as linhas ordenando por idade
	$this->MinhaBase->fetch(null,"idade desc","nome,sobrenome,idade",10,"idade"); // Realiza consulta com todos parametros acima 
	// SELECT nome,sobrenome,idade FROM minhabase GROUP by idade  LIMIT 10;
}



$this->find($id_primary)=> Retorna somente a linha onde a chave primaria é igual a passada como parametro
Exemplo:

public index(){
	$consulta = $this->MinhaBase->find(1); // Retorna somente a chave primaria 1
	print $consulta["nome"];
	print $consulta["sobrenome"];
	print $consulta["idade"];
}



$this->update(Array,PRIMARY) => Realiza updade de uma linha na tabela, onde a chave primaria seja igual a enviada
Exemplo:

public index(){
	// Utiliza array dos campos que quero editar
	$array = array(
	"idade"=>15
	);
	// Reliza edição do id =1
	$this->MinhaBase->update($array,1); // UPDATE table SET idade=15 WHERE id=1;
	// Ou
	$this->MinhaBase->update($array,array("id"=>1,"idade"=>25)); // UPDATE table SET idade=15 WHERE id=1 AND idade=25
	// Ou
	$this->MinhaBase->update($array,"id=1 AND idade=25 AND nome LIKE '%us%'"); // UPDATE table SET idade=15 WHERE id=1 AND idade=25 AND nome LIKE '%us%'
}



$this->insert(Array) => Realiza inserção no banco a partir de um array de dados
Exemplo:

public index(){
	// Utiliza array dos campos que quero inserir
	$array = array(
	"nome"=>"Lucas",
	"sobrenome"=>"Brito"
	"idade"=>19
	);
	// Reliza inserção retornando o id inserido
	$id_usuario = $this->MinhaBase->insert($array);
	print $id_usuario; // Igual a PDO::lastInsertId();
}



$this->delete(PRIMARY) => Realiza exclusão de uma linha a partir da chave primaria
Exemplo:

public function index(){
	// Deleta registro com a chave primaria 1 
	$this->MinhaBase->delete(1); //DELETE FROM table WHERE id=1;
	// OU
	$this->MinhaBase->delete(array("nome"=>"Lucas")); // DELETE FROM table WHERE nome='Lucas';
	// Ou
	$this->MinhaBase->delete("nome LIKE '%s%'"); // DELETE FROM table WHERE nome LIKE '%s%';
	
}
<br><br>
<code>$this->deleteWhere(PRIMARY) => Realiza delete com uma condição (Não utilizado mais)</code>
<br>
Exemplo:
public function index(){
	$this->MinhaBase->deleteWhere("nome='Lucas'"); // Deleta registros com a condição do nome seja igual a Lucas
}



$this->getSQL() => Retorna SQL da ultima execução
Exemplo:

...
public function index(){
     $this->MinhaBase->fetch("nome='Lucas'");
     print $this->MinhaBase->getSQL(); // Retorna SELECT * FROM tabela WHERE nome='Lucas';
     $this->MinhaBase->insert(array("nome"=>"Bernardo"));
     print $this->MinhaBase->getSQL(); // Retorna INSERT INTO tabela (nome) VALUES('Bernardo');
     print $this->MinhaBase->delete(1);
     print $this->MinhaBase->getSQL(); // Retorna DELETE FROM tabela WHERE id=1;
     }
     ...



$this->query(STRIng) => Realiza consulta PDO normal, retornando um resource
Exemplo:

public function index(){
	$consulta = $this->MinhaBase->query("Select * from lis_usuarios");
	$rows = $consulta->rowCount(); // O mesmo que count($this->MinhaBase->fetch());
	$fetch = $consulta->fetchAssoc(PDO::FETCH_ASSOC); // O mesmo que $this->MinhaBase->fetch()[0];
	$fetch_all = $consulta->fetchAll(); // O mesmo que $this->MinhaBase->fetch();
	$this->MinhaBase->query("DELETE FROM lis_usuarios WHERE id_usuario=1"); // O mesmo que $this->MinhaBase->delete(1)
}



Utilizando multiplas tabelas
$this->multi(Lb_Base,'coluna_filha','coluna_mae')

public function index(){
	/* Select * from numeros; 
	###################################################
	#                 numeros 			  #
	###################################################
	| id_numero(PK) | id_contato | numero | descricao |
	---------------------------------------------------
	|    1          |     1      | 8140   |           |
	###################################################
	*/
	$Numeros = new Numeros_Base($this->_pdo);
	/* Select * from contatos;
	##############################
	#	   contatos 	     #	
	##############################
	| id_contato(PK)|     nome   |
	------------------------------
	|     1         |     Lucas  |
	##############################*/
	$Contatos = new Contatos_Base($this->_pdo);
	
	// O segundo argumento é o campo de comparação da tabela filha(Numeros) 
	// e o terceiro é a chave primaria da tabela pai(Contatos), caso não seja passado 
	// o terceiro argumento é definido como a chave primaria 
	$multi = $Contatos->multi($Numeros,'id_contato','id_contato');
	
	// SELECT * FROM contatos,numeros WHERE contatos.id_contato=numeros.id_contato AND (nome LIKE '%Lucas%');
	$consulta = $muli->fetch("nome LIKE '%Lucas%'");
	/* Resultado:
	################################################################################
	| id_contato(PK)|     nome   | id_numero(PK) | id_contato | numero | descricao |
	--------------------------------------------------------------------------------
	|     1         |     Lucas  |    1          |     1      | 8140   |           |
	#################################################################################
	*/
	
}



Criptografia de dados:

$this->setCrypty("TEXTO") | $this->getCrypty("VALOR") => Criptografa e discriptografa utilizando base64 (Utilizar para proteger id's em metodos GET)

$texto = "Ola Mundo";
$valor = $this->setCrypty($texto);
$resposta = $this->getCrypty($valor);
echo "$resposta = $text";