Mantenha seu navegador atualizado:



Kohana Buscando dados do banco

Categoria: Kohana Publicado dia: 21/03/2011 11:07:23h Comentários: 0

O Kohana fornece ao desenvolvedor duas formas de acesso ao Banco de Dados. A mais básica é o Módulo Database, que faz a interface com o banco de dados que deseja manipular através de classes básicas como o MYSQL ou o PDO, ainda o mantendo dependente de consultas SQL. Outra é o Módulo ORM, que mapeia o banco de dados na forma de objetos.

Uma coisa que você deve pensar ao escolher uma das metodologias é o quão dependente sua aplicação ficará do Banco de Dados. Como o SQL não é implementado da mesma forma entre os diferentes fabricantes de bancos de dados, de um fabricante para outro ou de uma versão para outra, existem diferenças sutis entre os bancos. E com a escrita de SQL você torna aquele trecho do sistema dependente do banco. Um exemplo hipotético:

 


<?php

//Oracle
$sql "SELECT TO_DATE(data, 'YYYY-MM-DD') from tabela;";

$query $this->db->query($sql);

//MySQl
$sql "SELECT DATE_FORMAT(data,'%Y-%m-%d') from tabela;";

$query $this->db->query($sql);

?>

 

Observe que o nome das funções podem mudar de um banco para outro, bem como a quantidade e formato dos parâmetros. Então, ou você trabalha com apenas um banco e escreve consultas SQL voltadas para este, ou usa o ORM e trabalha de forma independente do banco de dados. E assim, poderá migrar sua aplicação para qualquer banco de dados que deseje.

Por tais motivos, falarei apenas do ORM. Caso deseje saber mais sobre o Database, por favor, consulte a página: Kohana Module Database

Primeiramente, vamos criar um Model chamado Contato na pasta application/classes/model.

 


<?php

class Model_Contato extends ORM {

    protected 
$_belongs_to = array(
        
'area' => array(
            
'model' => 'area',
            
'foreign_key' => 'area_id'
        
),
        
'endereco' => array(
            
'model' => 'endereco',
            
'foreign_key' => 'endereco_id'
        
)
    );
    
    protected 
$_has_one = array();
    
    protected 
$_has_many = array();

    protected 
$_table_name 'contatos';
    protected 
$_primary_key 'id';
    
}

?>

 

Este objeto será responsável por mapear a tabela Contatos existente no banco de dados e os relacionamentos que esta tabela tem com as tabelas de Área (aplicado como categorias) e Endereços.

Vamos fazer o Controller contato em application/classes/controller para gerenciar os contatos e efetuar consultas nele :


<?php

class Controller_Contato extends Controller_Template {

    public 
$template 'index';

    public function 
action_index()
    {
        
//Localiza todos os contatos em ordem descrescente de data de criação
        
$contatos ORM::factory('contato')->order_by('criacao''DESC')->find_all();
        
        
$area ORM::factory('area')->order_by('nome')->find_all();
        
        
//Instancia a view
        
$view View::factory('contato_index');
        
        
//Passa os contatos para a view
        
$view->contatos $contatos;
        
        
//Passa as áreas para a view
        
$view->areas $areas;
        
        
//Passa a view para o template
        
$this->template->content $view;
    }
    
    public function 
action_salvar()
    {
        
//Gera instancia de Model contato
        
$contato ORM::factory('contato');
        
$post Validation::factory($_POST);
        
        
//Seta dados do contato
        
$contato->nome $post->nome;
        
$contato->telefone $post->telefone;
        
$contato->celular $post->celular;
        
$contato->email $post->email;
        
$contato->site $post->site;
        
        
//Busca area pelo id
        
$area ORM::factory('area'$post->area->id);
        
        
//Associa area ao novo contato
        
$contato->area $area;
        
        
//Salva o contato no banco de dados
        
if($contato->save())
        {
            
$this->request->redirect('contato/index');
            exit();
        }
    }
    
    public function 
action_alterar($id)
    {
        
//Localiza contato no banco pelo id
        
$contato ORM::factory('contato'$id);
        
$post Validation::factory($_POST);
        
        
//Seta novos dados do contato
        
$contato->nome $post->nome;
        
$contato->telefone $post->telefone;
        
$contato->celular $post->celular;
        
$contato->email $post->email;
        
$contato->site $post->site;
        
        
//Busca area pelo id
        
$area ORM::factory('area'$post->area->id);
        
        
//Associa area ao contato
        
$contato->area $area;
        
        
//Salva o contato no banco de dados
        
if($contato->save())
        {
            
$this->request->redirect('contato/index');
            exit();
        }
    }
    
    public function 
action_apagar($id)
    {
        
$contato ORM::factory('contato'$id);
        
$contato->delete();
        
$this->request->redirect('contato/index');
        exit();
    }

}
?>

O action index do Controller contato você busca na tabela contatos do banco de dados todos os contatos gravados e passa para a view contato_index que será a responsável por exibir estes contatos encontrados. Durante a busca, aproveitamos para ordenar todos os contatos de acordo com a data em que foram registrados no sistema. Já as áreas foram ordenadas de acordo com o nome delas, para ficar em ordem alfabética.

Neste mesmo action buscamos também todas as áreas [categorias de contato] para exibir como menu.

Vejamos como ficou a view contato_index que demonstrará os resultados obtidos.

Sendo editado.

Comentários!


Kohana Inicialização do Framework

Categoria: Kohana Publicado dia: 21/03/2011 10:50:43h Comentários: 0

Para começar a estudar o KOHANA PHP Framework você deve baixar a versão mais recente do framework no site oficial do KOHANA. No momento estou trabalhando com a versão 3.1.2.

Antes de tentar instalar o framework é bom saber a utilidade de cada item. Vejamos o funcionamento básico de cada um:

Dentro da pasta kohana exitem alguns arquivos e diretórios necessários para o kohana funcionar.

 

 

O arquivo "index.php" é o arquivo principal, por onde todas as requisições de páginas passarão. O formato de requisição de uma página é http://site.com/index.php/controller/action/id e equivalerá ao conteúdo programado no controller especificado. Um exemplo:

 

<a href="http://site.com/index.php/artigos/editar/1">Editar</a>

 

Neste caso, o controller artigos será chamado, e o seu método editar será executado. Como parâmetro, editar receberá o id de valor 1. E os dados solicitados na requisição serão recebidos.

O arquivo example.htaccess possui um exemplo de arquivo .htaccess que poderá ser usado se sua hospedagem de site tiver suporte ao módulo ModRewrite do Apache.

Caso tenha, você deverá renomear o arquivo example.htaccess para ficar com o nome .htaccess. Isso mesmo, não terá nome, terá apenas a extensão. Vale lembrar que no linux arquivos que começam com "." são arquivos ocultos. Então, edite antes de renomear. Vejamos como ficaria o arquivo .htaccess.

 


# Habilita o rewrite
RewriteEngine On

# Informa o diretório do site
RewriteBase /
# Caso seu kohana fique em diretório diferente siga este modelo
# RewriteBase /lab/felipebastosweb/

# Não permite listar os arquivos dos diretórios publicamente
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Proibe acesso direto aos diretórios do kohana
#RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Permite que arquivos .css, .js, .js, etc sejam acessados diretamente
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Reescreve urls no formato site.com/controller/action para site.com/index.php/controller/action
RewriteRule .* index.php/$0 [PT]

 

Já o arquivo install.php não faz parte do framework, e deverá ser excluído após verificar que o kohana está pronto para funcionar. Para tanto, abra o seu site na página inicial, o arquivo install lhe mostrará tudo que precisa consertar até que você possa utilizar o kohana. As correções mais comuns é dar permissão de escrita aos diretórios de log e cache. Após tudo estar ok, pode apagá-lo.

 

A pasta application terá a aplicação que rodará no site atual "http://site.com".

 

 

O arquivo bootstrap.php contido neste diretório orientará o framework na execução desta aplicação. Vejamos as configurações básicas:

 

<?php

//Meu timezone, veja no php.net qual o seu
date_default_timezone_set('America/Bahia');
 
Kohana::init(array(
    
'base_url'   => '/',
    
    
//Se estiver usando mode_rewrite 
    
'index_file' => FALSE
));

Kohana::modules(array(
     
'auth'       => MODPATH.'auth',       // Basic authentication
     
'cache'      => MODPATH.'cache',      // Caching with multiple backends
     
'codebench'  => MODPATH.'codebench',  // Benchmarking tool
     
'database'   => MODPATH.'database',   // Database access
     
'image'      => MODPATH.'image',      // Image manipulation
     
'orm'        => MODPATH.'orm',        // Object Relationship Mapping
     
'unittest'   => MODPATH.'unittest',   // Unit testing
     
'userguide'  => MODPATH.'userguide',  // User guide and API documentation
    
));

?>

 

Já a pasta system tem o core do framework. As classes principais necessárias para o funcionamento do framework estão nesta pasta.

 

 

A pasta modules contém alguns módulos do kohana. É nesta pasta que estão os módulos database e ORM. Para configurar o banco de dado da aplicação principal basta alterar o arquivo database que está no diretório modules/database/config/database.php.

 

Pronto! Agora você já está preparado para fazer a instalação do kohana.

Para obter outras informações consulte o site e a comunidade do Kohana.

Comentários!