Back-End

21 set, 2012

Conheça o Easy Framework

Publicidade

Fala, pessoal, tudo tranquilo?

Hoje gostaria de apresentar para vocês um novo Framework para PHP. Nossa, mais um??

Acreditem, esse é diferente.

O Easy Framework foi desenvolvido por mim (Ítalo Lelis de Vietro) e é um dos poucos frameworks brasileiros. O projeto teve início em junho de 2011, quando senti a necessidade de uma ferramenta de auxílio para o desenvolvimento de aplicações ágeis em PHP (RapidApplicationDevelopment) e com facilidade para manter o código. Hoje o projeto conta com o suporte da comunidade PHP-PB e promete ser um ótimo framework.

Vamos aprender a criar uma aplicação simples com o EasyFw. Que tal criarmos um aplicativo para cadastrar livros de uma livraria?

Baixando o EasyFw

Primeiramente precisamos baixar a versão 2.0.0, que é a que vou utilizar no exemplo de hoje. Para isso, basta acessar o site do EasyFw.

Após isso, descompacte os arquivos no seu servidor web. Agora podemos criar nosso projeto. Existe uma pasta chamada demos, e nela temos um helloworld. Se você quiser, pode copiá-la para uma estrutura que fica mais ou menos assim.

  • livraria
  • easyframework

Agora, nessa estrutura, acesse livraria/App/webroot/index.php e mude a linha que informa onde nosso núcleo está.

$easy = '../../../easyframework/framework/Easy/bootstrap.php';

Estrutura de pastas

A estrutura de pastas do EasyFw é simples e lógica. Como já trabalhamos com namespaces, será muito fácil seguir uma hierarquia de pastas. Vamos conhecer a estrutura padrão:

  • livraria
    • App – Aqui é a raiz de nosso projeto
      • Config – Todas as configurações padrão estarão aqui
      • Controller – Os controllers da nossa aplicação
        • Components – Componentes que você quiser criar
    • Locale – Arquivos de tradução da aplicação
    • Model– Os Modelos da app
    • Vendors – Bibliotecas de terceiros do projeto
    • View
      • Elements – Os elementos para compor uma página
      • Layouts – Os layouts da aplicação
      • Pages – As views
    • tmp – Arquivos de cache
    • webroot – CSS, JS e imagens

 

  • easyframework – Diretório do núcleo do EasyFw

Essa estrutura nos permite criar vários projetos utilizando o mesmo núcleo.

Criando o banco de dados

Entendida a estrutura das pastas da aplicação, vamos trabalhar na criação do banco de dados.

Como nosso aplicativo será um cadastro de livros, teremos duas tabelas: uma para os livros e outra para as categorias.

CREATE DATABASE livraria

Com isso vamos criar as tabelas, começando pelos livros

CREATE TABLE `livros` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`titulo` varchar(45) NOT NULL,

`descricao` varchar(255) DEFAULT NULL,

`ano` int(11) DEFAULT NULL,

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`categoria_id` bigint(20) NOT NULL,

PRIMARY KEY (`id`),

KEY `FK_livros_categorias` (`categoria_id `),

CONSTRAINT `FK_livros_categorias` FOREIGN KEY (`categoria_id `) REFERENCES `categorias` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

E agora a tabela de categorias:

CREATE TABLE `categorias` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`nome` varchar(45) NOT NULL,

`status` varchar(10) NOT NULL DEFAULT 'ATIVO',

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Pronto, agora nós já podemos criar as configurações para nossa aplicação acessar o banco. Para isso. saiba qual a senha e usuário para acessar o seu SGBD.

Vá até a pasta de configurações no arquivo database.yml. App/Config/database.yml

Nele, você poderá setar diversas informações sobre o banco de dados, inclusive qual utilizar para testes, produção ou desenvolvimento. Para nosso exemplo, utilizaremos apenas o banco de desenvolvimento. Vejamos como configurá-lo.

datasource:

development:

default:

driver: mysql

host: localhost

user: root

password: ''

database: livraria

encoding: utf8

prefix: ''

 

production:

default:

driver: mysql

host: localhost

user: seuUsuario

password: "suaSenha"

database: seuBancoDeProducao

encoding: utf8

prefix: ''

Acredito que o arquivo seja simples de configurar, mas vou explicar o que cada opção faz:

driver: Informamos qual o driver iremos utilizar (MySQL, SQLite, Oracle)

host: Onde nosso banco de dados está localizado

user: O usuário para acessarmos nosso banco

password: A senha para acessarmos nosso banco

database: O nome do banco

encoding: A codificação que usaremos no banco (UTF-8)

prefix: O prefixo para as tabelas

Com isso, já temos nosso banco rodando na aplicação, mas ainda temos que criar os modelos e os controllers para que a aplicação funcione corretamente.

Criando os models

Vamos criar nosso primeiro modelo.

<?php

namespace App\Model;

/**

* @TableName(“categorias”)

*/

class Categorias extendsAppModel

{

}

Nosso modelo irá herdar da classe AppModel, que está no mesmo namespace do nosso modelo App\Model, que por sua vez herda de \Easy\Model\Model.

O nome do modelo será o mesmo nome da tabela, só que ATENÇÃO: ele está no singular e a tabela, no plural. Isso não é uma regra no EasyFw, mas uma convenção para simplificarmos as coisas.

Outra coisa importante de ressaltar é que nossos modelos podem ser orientados a aspectos (anotações), nome a anotação @TableName – nela, informamos a tabela do banco de dados que nosso modelo representa. Caso o nome do seu modelo seja o singular de sua tabela, o EasyFw já fará isso automaticamente e você pode omitir essa anotação, só coloquei ali para ilustrar.

Vamos criar nosso segundo modelo:

namespaceApp\Model;

/**

* @TableName(“livros”)

* @HasOne (“Categoria”)

*/

classLivroextendsAppModel

{

}

Notem que esse modelo tem um relacionamento com categorias, nosso relacionamento diz o seguinte: um livro pertence a uma categoria. Para isso, nós usamos a anotação HasOne para dizermos que nosso modelo Livro tem um modelo Categoria relacionado a ele.

Os dois arquivos devem ser salvos dentro da nossa pasta de Modelos App\Model, com os nome Categoria.php e Livro.php.

Criando os controllers

É aqui que a mágica acontece. Os controllers vão receber as requisições dos usuários, interagir com os modelos e devolver uma página para ele.

Vamos criar o controler de categorias primeiro:

namespace App\Controller;

use Easy\Model\FindMethod;

classCategoriasControllerextendsAppController

{

}

Notem novamente as convenções: o nome de nosso controller agora está no plural, isso permitirá o EasyFw saber que esse controller interage com nosso modelo Categoria, e ele já vai disponibilizar uma variável $this->Categoria para você acessar seu modelo, sem precisar se preocupar em instanciá-lo.

Agora precisamos criar as actions para o usuário interagir com nosso controle e realizar as operações básicas de um CRUD. Para isso, vamos criar a primeira action de listagem:

public function index()

{

//Pegamos todas as categorias do banco

$categorias = $this->Categoria->getEntityManager()->find(null, FindMethod::ALL);

//Aqui iremos passer a variável para a view

$this->categorias = $categorias

}

Essa action irá pegar todas as categorias do banco e retornar para a variável categorias. Logo em seguida, nós criamos uma variável dinamicamente na View com o nome de categorias.

Agora vamos criar a action para adicionar uma categoria

public function add()

{

If ($this->RequestHandler->isPost()){

//Vamos salvar os dados que vieram de um formulário de cadastro

$this->Categorias->save($this->data);

//redirecionamos para a listagem

$this->redirectToAction(“index”);

}

}

Nessa action existe um fluxo a ser seguido, vamos entendê-lo:

O usuário irá requisitar uma View para cadastrar a categoria, então irá chamar a actionadd. Ela vai verificar se a requisição veio via POST. Como não veio, ela passa pelo if e exibe a View para o usuário.

Depois de clicar no botão de cadastrar, novamente a requisição irá para a actionadd, mas agora ela veio via POST e entrará no if, e nós vamos pegar os dados do formulário na variável $this->data, e vamos salvá-lo no nosso modelo.

Por enquanto, vamos ficar apenas com essas duas actions.

Salvem esse arquivo na pasta App/Controller com o nome CategoriasController.php

Criando as views

Vamos entender como o EasyFw trabalha com as Views.

Primeiramente, o Easy irá procurar um diretório dentro das views com o nome do Controller requisitado, como por exemplo Categorias, e dentro dessa pasta ele irá procurar um arquivo com o nome da action. Exemplo: index.tpl – é nela que vamos colocar a listagem das nossas categorias.

Depois disso, ele irá procurar por um Layout que nossa View irá herdar. Vamos começar criando o layout.

Nossas Views trabalham com o Smarty Template Engine, para realizar a abstração do PHP.

<!DOCTYPE html>
<html>
<head>
{$Html->charset()}
<title>{__(“Livraria”)}</title>
</head>
<body>
<div id="content">
{block name=”content”}{/block}
</div>
</body>
</html>

Esse é o nosso layout, ele é bem simples, mas vamos ver como ele funciona.

Nós vamos utilizar um Helper chamado $Html. Com ele, podemos tirar o trabalho de ficar digitando Html puro na mão. Por exemplo, o $Html->charset() irá imprimir “<meta charset=”utf-8”>”. Esse helper já irá identificar se você está utilizando o DOCTYPE do HTML5 e imprime o meta tag correto para você com o charset que sua aplicação utiliza. Viu como é simples?

Na linha de baixo, nós temos {__(“Livraria”)}, por que colocamos essa string entre os parentes? Simples… com isso, nós já temos suporte para internacionalizar nossa aplicação. Essa função irá gerar um arquivo de tradução para você, e você simplesmente pode traduzi-lo para outra língua e utilizá-lo na sua app, sem precisar alterar seu código.

Na divcontent, temos uma coisa chama {blockname=”content”}{/block} – é aqui que o conteúdo da View será impresso. Isso se chama herança de templates, e nos ajuda bastante a não ficar digitando o HTML completo para cada View.

Agora peguem esse arquivo e salvem-no na pasta App/View/Layouts com o nome de Layout.tpl

Vamos criar nossa View para listar as categorias:

<h1>{__(“Listagem de Categorias”)}</h1>
<tablewidth="100%" cellspacing="0" cellpadding="0">
<trbgcolor="#F0F0F0">
        <td>Id</td>
        <td>Nome</td>
        <td>Status</td>
        <td>Ações</td>
</tr>
{foreach $categorias as $categoria}   
<tr>
        <td>{$categoria->id}</td>
        <td>{$categoria->nome}</td>
        <td>{$categoria->status}</td>
        <td>
        {$Html->actionLink(“Editar”, “edit”, true, $categoria->id)}
        {$Html->actionLink(“Excluir”, “delete”, true, $categoria->id)}
</tr>
{/foreach}

Essa é a nossa view para listagem, ela é bem simples. Observem que utilizamos uma estrutura de laço de repetição, o foreach. No Smarty fazemos dessa forma {foreach $var as $v}, e ele irá iterar sobre sua coleção.

Também utilizamos outro método do HelperHtml, o actionLink, que irá criar um link para as actions no controller que você quiser. No nosso caso, ele vai imprimir:

<ahref=”http::/localhost/livraria/edit/1”>Editar</a>

<ahref=”http::/localhost/livraria/delete/1”>Excluir</a>

Salve esse arquivo na pasta de viewsApp/Views/Pages/Categorias com o nome de index.tpl

Estamos quase acabando o exemplo, só falta criarmos uma View da página inicial para o usuário ver alguma coisa. Para isso, crie um arquivo chamado index.tpl na pasta App/Views/Pages/Home.

<h1>{__(“Bem Vindo ao exemplo de Livraria”)}</h1>
{$Html->actionLink(null, “categorias”)}

Conclusão

Por enquanto, vamos ficando por aqui. Espero que tenham gostado do exemplo. Nos próximos artigos, vamos saber como adicionar, editar e excluir as Categorias e os Livros do nosso exemplo.

Obrigado pelo apoio e atenção pessoal. Abraços.

Links

Site do Framework: http://www.easyframework.net

Repositório no Github: https://github.com/LellysInformatica/EasyFramework

Site da comunidade PHP-PB: http://php-pb.net/