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
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
É 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
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
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
Quando o usuário solicita o endereço, por exemplo:
http://localhost/public/?go=home&action=mostrar
acontece o seguinte:
- O Servidor acessa "public/index.php" com os seguintes parametros:
- go = home
- action = mostrar
- O Index trata os parametros, traduzindo-os:
- go = controller
- action = ação
- O public/index.php chama o controller (home)
- Imprime na tela o layout padrão (Caso não seja solicitado para não imprimir)
- Executa as ações do método init() do controller
- Acessa a action (mostrar)
- Executa as ações da "action" (mostrar)
- Acessa e imprime a view da action do controller (views/Home/mostrar.phtml)
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)
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
$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 | |
#################################################################################
*/
}
$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";