zeanwork.com.br  >>  Tutoriais  >>  Criando uma lista de contatos
Criando uma lista de contatos
Faremos uma lista de contatos, onde teremos a opção de cadastrar, editar e deletar eles.
Publicado por: Josemar Davi Luedke
Em: 12/08/2010 14h 59min


Para iniciar uma aplicação com o Zeanwork você deve saber um pouco sobre os padrões dele.
Uma das padronizações que o Zeanwork possui é na arquitetura das pastas e arquivos, as pastas devem sempre ter a primeira letra maiúscula, seguindo o padrão CamelCase, já os arquivos, devem ter a primeira letra minúscula, seguindo o padrão lowerCamelCase.
Outro padrão é a extensão dos arquivos de view, o default do Zeanwork é .html, seguindo com o .php, tornando assim nomeDoArquivo.html.php, você pode alterar o default do Zeanwork em Zeanwork/Configs/settings.php.
O Zeanwork trabalha com "ambientes", onde criamos várias configurações para cada ambiente e com isso você pode ter uma configuração para quando estiver desenvolvendo e outra para quando sua aplicação estiver publicada.

Sabendo estes padrões podemos começar.

Neste caso nós vamos utilizar banco de dados, então devemos configurar os dados para a conexão com o mesmo. Vá em App/Configs/database.php, modifique os dados para a conexão ou crie mais uma configuração para o ambiente que desejar. Se você deseja ter somente uma configuração para todos os ambientes, crie a configuração com o nome de all. Modifique a configuração de auto.connect.database e auto.disconnect.database para true. Isso irá conectar com o banco de dados e desconectar automaticamente quando sua aplicação for executada.

Veja exemplo:
Configure::write('database', array(
				'development' => array(
					'persistent' => false
					, 'drive' => 'MySql'
					, 'host' => 'localhost'
					, 'user' => 'root'
					, 'password' => ''
					, 'database' => 'zeanwork'
					, 'prefix' => null
					, 'charset' => 'utf8'
					)
				)
			);

Configure::write('auto.connect.database', true);

Configure::write('auto.disconnect.database', true);


Agora vamos criar o banco de dados e a tabela para os contatos.
Veja o script de criação do banco de dados e da tabela.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `zeanwork` DEFAULT CHARACTER SET utf8;
USE `zeanwork`;
-- -----------------------------------------------------
-- Table `zeanwork`.`contacts`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `zeanwork`.`contacts` (
 `idContacts` INT NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(150) NULL ,
 `email` VARCHAR(250) NULL ,
 `phone` VARCHAR(20) NULL ,
 PRIMARY KEY (`idContacts`) )
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


Bom, agora vamos criar o controller que será executado quando acessarmos a URL: /contacts. Vá em App/Controller/ e crie o arquivo contacts.php com a seguinte estrutura:
class ContactsController extends AppController {
    public $uses = array('contacts'); //Carrega o model contacts
}

Como precisamos buscar dados, fazer alterações e inserções no bando de dados, nós precisamos de um model para a tabela de contacts.
Vá em App/Models/ e crie um arquivo chamado de contacts.php com a seguinte estrutura:
class Contacts extends AppModel {
   public $table = 'contacts';
   public $primaryKey = 'idContacts';
}

Vamos criar um novo layout para a sua aplicação. Vá em App/Layouts/ e crie o arquivo default.html.php com a seguinte estrutura:
<!DOCTYPE html>
<html>
   <head>
       <title><?php echo $this->pageTitle; echo ($this->pageTitle != null) ? ' -' : ''; ?> Contatos</title>
   </head>
   <body>
       <div id="content">
           <?php echo $this->contentForLayout; ?>
       </div>
   </body>
</html>


Agora vamos criar a action index e sua respectiva view. É nesta action que faremos a listagem dos contatos.
A action deve ser uma função dentro da classe do controller, que nesse caso é contact.

Veja exemplo:
public function index(){
    $this->setVar('contacts', $this->contacts->read()); //Seta uma variável na view com todos os dados da tabela contacts
}

Para criarmos a view para esta action, você deve criar uma pasta correspondente ao nome do controller. Esta pasta deve ser criada em App/Views/, que nesse caso o controller é Contacts, então ficará assim: App/Views/Contacts/.
O arquivo da action deve ficar dentro da pasta App/Views/Contacts/, e seu nome deve ser index.html.php.
//App/Views/Contacts/index.html.php
<a href="<?php echo Router::url('/contacts/add')?>">Adicionar</a><br />
<?php
foreach($contacts as $contact):
?>
   <p>
       <b><?php echo $contact['name']?></b> - <?php echo $contact['email']?> - <?php echo $contact['phone']?> <br />
       <a href="<?php echo Router::url('/contacts/edit/'.$contact['idContacts'])?>">Editar</a> - <a href="<?php echo Router::url('/contacts/del/'.$contact['idContacts'])?>">Apagar</a>
   </p>
<?php
endforeach;

Vamos criar a action e sua view para adicionar um novo contato.
public function add(){
    if($this->input->post()){
        $this->contacts->autoSave();
        $this->redirect('/contacts');
    }
}

//App/Views/Contacts/add.html.php
<h1>Adicionar contato</h1>
<?php
$this->load->helper('form');
echo $this->form->start('contact');
echo $this->form->input('name',  array('label' => 'Nome: ', 'divForLabel' => true, 'divForInput' => true)).br();
echo $this->form->input('email',  array('label' => 'E-mail: ', 'divForLabel' => true, 'divForInput' => true)).br();
echo $this->form->input('phone', array('label' => 'Telefone:', 'divForLabel' => true, 'divForInput' => true)).br(2);
echo $this->form->submit('submit', array('value' => 'Postar', 'class' => 'submit'));
echo $this->form->end();

Vamos criar a action e sua view para editar um contato.
public function edit($id = null){
    $this->setVar('contact', $this->contacts->findByIdContacts($id));
    if($this->input->post() && $id != null){
        $this->contacts->autoSave(array('idContacts' => $id));
        $this->redirect('/contacts');
    }
}

//App/Views/Contacts/edit.html.php
<h1>Editar um contato</h1>
<?php
$this->load->helper('form');
echo $this->form->start('contact');
echo $this->form->input('name',  array('label' => 'Nome: ', 'divForLabel' => true, 'divForInput' => true, 'value' => $contact['name'])).br();
echo $this->form->input('email',  array('label' => 'E-mail: ', 'divForLabel' => true, 'divForInput' => true, 'value' => $contact['email'])).br();
echo $this->form->input('phone', array('label' => 'Telefone:', 'divForLabel' => true, 'divForInput' => true, 'value' => $contact['phone'])).br(2);
echo $this->form->submit('submit', array('value' => 'Postar', 'class' => 'submit'));
echo $this->form->end();

Vamos criar a action para deletar um contato.
public function del($id = null){
    if($id != null){
        $this->contacts->delete($id);
        $this->redirect('/contacts');
    }
}


Para que quando você acessar o root da sua aplicação abra a lista de contatos, você deve alterar o controller padrão.
Para fazer isso, você deve localizar o método Router::setRoot() no arquivo de configuração das rotas, que é localizado em App/Configs/routers.php.

Veja exemplo:
Router::setRoot('contacts');

Bom, o básico é isso.
Este é só um pequeno exemplo de como colocar o Zeanwork para trabalhar. Para você se aprofundar mais no Zeanwork, aconselhamos a ler a documentação do Zeanwork.
Comentários
Gilberto
16/09/2010 14h 13min
estou tentando seguir o tutorial mas ele da erro


Ops!

Database Error: Você não está conectado com o banco de dados!
Page: C:\wamp\www\ze\Zeanwork\Datasource\mysql.php
Line: 608
[Zeanwork Framework PHP]


E quando coloco o contacts/edit da ero na linha 14
Parse error: parse error in C:\wamp\www\ze\App\Views\Contacts\edit.html.php on line 14
Josemar Davi Luedke
16/09/2010 14h 23min
Gilberto,

Sobre o primeiro erro, você deve configurar os dados para a conexão. Modifique a configuração de auto.connect.database e auto.disconnect.database para true (No arquivo: App/Configs/database.php). Isso irá conectar com o banco de dados e desconectar automaticamente quando sua aplicação for executada.

Sobre o segundo erro, verefique se você colocou todo o código desta view.

Aguardo para saber se deu certo!
Gilberto
16/09/2010 14h 41min
Conexão deu certo

Coloquei todo o código conforme acima: Contacts/add.html.php

Nesta parte no editor acusa erro na linha 13 que é esta:
echo $this->form->input('name',  array('label' => 'Nome: ', 'divForLabel' => true, 'divForInput' => true)).br();

Tenho uma pergunta: porque o php começa abaixo e deixa um pedaço do bloco fora da tag?
Sou iniciante de Framework por isso pergunto.

Aguardo
Josemar Davi Luedke
16/09/2010 15h 11min
Gilberto,

No código não tem erros! Qual editor você esta utilizando? Talvez ele não esteja interpletando o código!

Bahh, me desculme, mas não entendi a sua pergunda!


Aguardo!
Gilberto
16/09/2010 15h 18min
Vou verificar o que ocorre ...

Este codigo aqui tem poucas linhas e da parse erro

OBS: quando tiro o public nao da erro, mas não funciona.

Sobre a pergunta ... alguns blocos ficam fora da tag

(acusa erro nesta linha) public function del($id = null){
if($id != null){
$this->contacts->delete($id);
$this->redirect('/contacts');
}
}

Vc tem o zip dele ai pra eu estudar?
Gilberto
16/09/2010 15h 41min
Josemar...

Tudo certo agora.

Era só o espaço que tinha antes do array

echo $this->form->input('name', array('label' =>

Obrigado
Josemar Davi Luedke
16/09/2010 15h 46min
Ok, mas se você quiser o exemplo completo eu posso lhe passar o endereço para download!!!

O que você achou do framework?
Gilberto
18/09/2010 13h 15min
Sou novo quando se trata de Framework normalmente utilizo o método tradicional para programar ... mas isto é cansativo, por isso estou avaliando Framework.

Sobre este eu gostei, dos tutoriais que peguei para fazer foi o úncio que consegui finalizar.

Ainda falta muito para eu me adaptar já que tudo é novo.

Teremos mais tutoriais?

Seria interessante realizar um projeto onde trabalhe com template, paginação e validação de dados dos formulários.

Acho que é um grande projeto só precisamos de mais tutoriais.

Att Gilberto
Josemar Davi Luedke
18/09/2010 13h 22min
Gilberto, sim teremos mais tutoriais em breve.
Fico feliz que você gostou!

Obrigado.
JULIO
29/09/2010 14h 26min
Obrigado pelo exemplo!!!!
Leonardo
07/12/2010 00h 36min
Olá

Gostaria de saber se podes me disponibilizar esta lista de contatos pronta ou um link p download...

Eu nao entendo de programação e gostaria muito de experimentar esta lista.

Desde Já Agradeço
Josemar Davi Luedke
07/12/2010 08h 33min
Olá, segue o link para download!

download


Att, Josemar Davi Luedke.
Flavio Cesarino
26/11/2011 23h 10min
Legal, achei muito interessante este Framework por ser brasileiro e ter toda a sua documentação em português. Ideal para quem está começando ou para quem pretende começar a trabalhar com framework.

Encontrei este Framework através do comentário no site: http://www.pinceladasdaweb.com.br/blog/2008/12/15/7-frameworks-php-brasileiros/


Deixe seu comentário