Aplicativos em PHP/FrameWorks/Zephyr-php

Guia Rápido de Instalação e Uso do Framework ZEPHYR

Site oficial - http://zephyr-php.sf.net

Introdução

Um Framework baseado em AJAX e MVC para desenvolvedores de PHP5

Podemos desenvolver aplicações comerciais facilmente usando um framework robusto.

Ele é extremamente fácil de aprender e muito simples de implementar.

Com ele podemos entregar uma aplicação comercial completa em AJAX e em camadas no backend (MVC) dentro de alguns minutos.

Instalação e desenvolvimento de pacotes que você desenvolve para Zephyr são agradáveis.

Alé disso devemos receber todas os recursos do mais popular template engine "smarty" e da poderosa camada de abstração de bancos de dados "ADOdb".

Vamos seguir com a documentação para descobrir como é fácil desenvolver aplicações AJAX usando o framework Zephyr.

Zephyr é um framework que utiliza MVC (model-view-controller) e suporta completamente a separação da camada de negócio da camada de apresentação. O framework foi construído usando bibliotecas populares testadas no backend.

Por isso o código desenvolvido com Zephyr é mais estável e flexível para usuários finais.


Características

Aqui estão algumas das mais importantes características do Zephyr:

1. Usa o template engine Smarty. Assim o desenvolvimento com os templates no zephyr é flexível e estruturado.

  Além disso podemos usar todas os poderosos recursos do smarty em nossos templates.
  Assim a curva de aprendizado é baixa.

2. A adoDB é usada como DAL (data access layer) camada de abstração de bancos de dados no zephyr.

3. Podemos gerenciar múltiplos bancos de dados concorrentemente nas ações do zephyr.

4. Fácil integração de scripts personalizados em PHP e de bibliotecas em javascript.

5. O frontend do zephyr é desenvolvido em cima da famosa biblioteca prototype do Sam Stephenson.

  Isto reduz o trabalho de usar javascript nos templates e dá a você enorme flexibilidade.

6. Zephyr usa CPAINT como interface para AJAX. Assim você pode facilmente passar múltiplos caracteres de e para suas ações usando zephyr.

7. Cada pacote (package) ou aplicação tem seu próprio inicializador.

8. Implementa processadores de pré ações que ajudam-nos a executar algumas ações específicas antes das ações normais.

  Isto deve nos ajudar a implementar validações mais robustas.

9. Suporta ações do cron que executam em intervalos regulares.

10. Fácil manipulação de registros do banco de dados. Requisições internas do gerente do zephyr gerencia todos os parâmetros requisitados de uma forma flexível e você não precisa acessar e configurar esses parâmetros exclusivamente.

11. Podemos integrar facilmente com qualquer pacote PEAR.

12. Você pode gerenciar funções de agregação de bancos de dados através do objeto interno do zephyr de agregação de bancos de dados.

13. Suporta múltiplos níveos de filtros definidos pelo usuário.

14. Fácil integração com os ezComponents.


Instalação

Download - http://sourceforge.net/project/showfiles.php?group_id=151993

Apenas faça o download e descompacte no diretório web.

Altere as permissões do diretório "temp" para 777.

Uma estrutura típica do zephyr:

- zephyr
  | + abstract
  | + documentation
  | + functions
  | + helper
  | + images
  | + interfaces
  | + internal
  | + javascript
  | + packages
  | + temp
  | + thirdparty
  |   .htaccess
  |   index.php

Iniciando a Usar o Zephyr

Todas as aplicações no Zephyr estão no diretório "packages".

Caso pretenda criar uma aplicação com o Zephyr, apenas crie um sub-diretório no diretório "packages" ou então faça uma cópia de um dos aplicativos de exemplo. Esta última opção é mais indicada para quem está dando seus primeiros passos.

Basicamente:

Criar o banco - agenda (MySQL)

CREATE TABLE `agd` (
  `codigo` int(11) NOT NULL default '0',
  `nome` varchar(255) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `site` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`codigo`)
)

Alterar o script dbinfo.class.php no diretório "helper" da aplicação com as informações corretas.

- Faça uma cópia do aplicativo "student_db" para o nome desejado, "agenda" por exemplo

- Então, tendo em vista sua tabela e campos, edite cada um dos arquivos e troque as ocorrencias de student, students, std, por agenda, agendas, agd e os campos também pelos respectivos.

Para facilitar crie a tabela com a mesma quantidade de campos e com tipos idêntivos aos originais.

- Comece editando o arquivo XML (package.xml) que se encontra no raiz da aplicação

- O arquivo readme.txt ou leiame-txt contém algumas informações para rodar a aplicação, inclusive o esquema do banco.

- Depois percorra cada um dos arquivos do aplicativo.

- Para facilitar use o recurso procurar e sobrescrever, tendo o cuidado de ativar a opção procurar palavra inteira.

Aproveite para observar a estrutura das pastas, arquivos, classes e funções do framework.

Veja a estrutura:

- zephyr
  | - packages
  |   | + student_db
  |   | + agenda

Script para o PostgreSQL:

CREATE TABLE agd (
  codigo int NOT NULL default 0,
  nome varchar(255) NOT NULL default '',
  email varchar(50) NOT NULL default '',
  site varchar(50) NOT NULL default '',
  PRIMARY KEY  (codigo)
)

Para suporte ao postgresql adicione este código:

case "postgres":
     $dsn =  "{$dbinfo->get_dbtype()}://{$dbinfo->get_dbuser()}:{$dbinfo->get_dbpwd()}@{$dbinfo->get_dbhost()}/{$dbinfo->get_dbname()}?persist={$dbinfo->get_persist()}";
     break;

Logo após a entrada do mysql no arquivo zephyr/helper/DatabaseConector.class.php

Veja aqui um exemplo que criei partindo do student_db (agenda, 7,98Kb).

Conexão com o banco de dados

Os dados encontram-se na classe dbinfo.class.php dentro do diretório helper:

<?
class dbinfo extends abstractdbinfo {
    public function __construct()
    {
            $this->dbhost = "localhost";
        $this->dbname = "agenda";
        $this->dbuser = "root";
        $this->dbpwd = "";
        $this->dbtype = "mysql";
        $this->persist = 1;
    }
}
?>  

Para PostgreSQL

<?
class dbinfo extends abstractdbinfo {
    public function __construct()
    {
        $this->dbhost = "localhost";
        $this->dbname = "agenda";
        $this->dbuser = "postgres";
        $this->dbpwd = "postgres";
        $this->dbtype = "postgres";
        $this->persist = 1;
    }
}
?>  

O Zephyr vem uma estrutura mínima do ADOdb, que atualmente traz:

- MySQL

- SQLite

- Postgresql

- MSSQL (Both ODBC and Normal)

- ODBC

- Oracle

Mas caso queira trabalhar com qualquer outro SGBD nao contemplado, apenas baixe o ADODB e utilize sem problema.

Apenas para o SQLite, que é baseado em arquivos, existe algumas diferenças. Veja:

Devemos criar um diretório para o banco "sqlitedb".

<?
class dbinfo extends abstractdbinfo
{
    public function __construct()
    {
        $pm = new packagemanager();
        $package_path = $pm->get_package_path(); //physical path to this package
        $this->dbhost = $package_path."/sqlitedb/";
        $this->dbname = "test.sqlite";
        $this->dbtype = "sqlite";
        $this->persist = 1;
    }    
}
?>

Operações com o SQLite:

//viewreport.class.php

<?
class viewreport implements action
{
    public $params;
    public function execute()
    {
        $dao = new DAO(); //instantiate Data Access Object
        $dao->execute("create table students (name varchar(100))");

        $dao->execute('insert into students values("ayesha")');
        $dao->execute('insert into students values("didar")');
        $dao->execute('insert into students values("shahana")');
        $dao->execute('insert into students values("tipoo")');

        $result = $dao->selectBySQL("select * from students");
        $data = array("students"=>$result);
        return array("view_file"=>"reports","data"=>$data);
    }
}
?>

Veja agora na camada view:

//reports.tpl
<h1>All Students</h1>
{foreach item=student from=$students name=std}
{$smarty.foreach.std.iteration}.{$student.name}<br>
{/foreach}

Operações com Bancos de Dados

Inserir registos em tabelas com o framework Zephyr é muito fácil:

Veja a estrutura da tabela student:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| name         | varchar(255)|      |     |         |                |
| roll         | int(11)     |      |     |         |                |
| class        | int         |      |     |         |                |
+--------------+-------------+------+-----+---------+----------------+

Agora vamos criar o modelo de domínio, que é uma classe simples, contendo todos os campos, exceto os de tipo auto_increment. Então para a classe student:

class student
{
    public $name;
    public $roll;
    public $class;
}

Agora vamos criar um arquivo na camada view para entrada dos dados:

     <input type="text" id="name">
     <input type="text" id="roll">
     <input type="text" id="class">
     <input type="button" value=" = " onclick="insert_std();" />

Veja a função:

function insert_std()
{
  serialized = group_serialize("name","roll","class");
  load_action_value('insert_record', serialized,'result');
}

Esta função serializa os dados e invoca a ação "insert_record". Veja a ação:

<?
load_db_domain("student");

class insertstudent implements action {

    public $params ;

    public function execute()
    {        
        $cls =     auto_fill_domain("student");
        $dao = new DAO($cls);
        $query = $dao->insert();
        $students = $dao->selectBySQL("SELECT * FROM   students");
        $data = array("students"=>$students);
        
        return array("view_file"=>"liststudents", "data"=>$data);
    }
    
}
?>

Alterando e excluindo registros:

<?
load_db_domain("student");

class updatestudent implements action {

    public $params ;

    public function execute()
    {        
        cls =     auto_fill_domain("student");        
        $dao = new DAO($cls);
        $query = $dao->update("roll=1");
        $students = $dao->selectBySQL("SELECT * FROM   students");
        $data = array("students"=>$students);
        
        return array("view_file"=>"liststudents", "data"=>$data);
    }
}
?>

Faz a tualização "where roll = 1".


Créditos

Lead developer : Hasin Hayder

Javascript and Frontend : Rasiul Kabir

DAO and Helper classes : Prashun Paul

Feedback - Equipe de Desenvolvimento (zephyr@phpxperts.net or zephyr@phpxperts.org)


Forum - http://zephyr-forum.phpxperts.net

Documentação online e offline distribuida juntamente com o pacote para download.

Para maiores detalhes (em inglês), veja a documentação oficial.

A intenção deste pequeno guia é apenas a de facilitar a vida de quem não tem um bom domínio do inglês.

Tradução direto do tutorial original do site por Ribamar FS - ribafs[ ] yahoo.com - 22:06 28/11/2006