Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre  >

Crie Web sites rapidamente com CakePHP, Parte 2: Faça mais e melhor com CakePHP

developerWorks
Ir para a página anteriorPágina 3 de 14 Ir para a próxima página

Opções de documento

Código de amostra


Classificar este tutorial

Ajude-nos a melhorar este conteúdo


Scaffolding

No momento, o Tor não faz muita coisa. Ele permite que as pessoas se registrem, façam login e vejam quem mais está registrado. Agora o que ele precisa é permitir que os usuários insiram alguns produtos no catálogo ou vejam alguns produtos de outros usuários. Um bom modo de começar isso é usar o scaffolding.

Scaffolding é um conceito que vem do Ruby on Rails (veja os Recursos). É um modo excelente de construir estruturas rapidamente para prototipar o aplicativo, sem ter que escrever um monte de código descartável. Mas o scaffolding, como indica o nome em inglês ("andaime"), é algo que deve ser usado para ajudar a construir o aplicativo, não algo sobre o qual construí-lo. Quando você começar a desejar que o scaffolding agisse diferente, é hora de parar de usá-lo.

Configuração das tabelas de produtos

O scaffolding funciona examinando tabelas de bancos de dados e criando os tipos básicos de elementos normalmente usados com uma tabela: listas, botões acrescentar/excluir/editar, as coisas normalmente chamadas de Criar, Ler, Atualizar, Excluir (CRUD). Para começar, você precisa de algumas tabelas para conter as informações de produto e de vendedor.


Listagem 4. Criando tabelas para conter informações de produto
                    
CREATE TABLE 'products' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT ,
'title' VARCHAR( 255 ) NOT NULL ,
'dealer_id' INT( 10 ) NOT NULL ,
'description' blob NOT NULL ,
PRIMARY KEY  ('id')
) TYPE = MYISAM ;

CREATE TABLE 'dealers' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT ,
'title' VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY  ('id')
) TYPE = MYISAM ;
                

Além disso, será útil para esta demonstração inserir alguns dados na tabela de vendedor.

INSERT INTO dealers (title)
VALUES ('Vogon Construction Corp'), ('Bistromathics, Inc')

Um comentário importante sobre o scaffolding: Lembra daquele comentário sobre configuração do banco de dados sobre teclas estrangeiras que seguem o formato singular_id como user_id ou winner_id? No CakePHP, o scaffold espera que qualquer campo que termine em _id seja uma tecla estrangeira em uma tabela com o nome do que quer que preceda _id — por exemplo, o scaffolding esperaria que dealer_id fosse uma tecla estrangeira da tabela do vendedor.



Voltar para parte superior


Configuração do modelo de produtos

A funcionalidade dos produtos representa um conjunto totalmente novo de modelos, visualizações e controladores. Você terá de criá-los como fez na Parte 1. Crie seu modelo de produto em app/models/product.php.


Listagem 5. Criando um modelo de produto
                    
<?php
  class Product extends AppModel
  {
    var $name = 'Product';
    var $belongsTo = array ('Dealer' => array(
'className' => 'Dealer',
'foreignKey'=>'dealer_id')
    );
  }
?>
                

Você notará a variável $belongsTo. Isso é conhecido como associação de modelo.



Voltar para parte superior


Associações de modelo

As associações de modelo dizem a um modelo que ele está relacionado de alguma maneira a outro modelo. Configurar associações adequadas entre os seus modelos lhe permitirá lidar com entidades e seus modelos associados como um todo, em vez de individualmente. No CakePHP, há quatro tipos de associações de modelo:

hasOne
A associação hasOne diz ao modelo que cada entidade nele tem uma entidade correspondente em outro modelo. Um exemplo disso seria a entidade de perfil correspondente da entidade do usuário (presumindo-se que só seja permitido um perfil por usuário).
hasMany
A associação hasMany diz ao modelo que cada entidade nele tem várias entidades correspondentes em outro modelo. Um exemplo disso seria um modelo de categoria que tenha muitas coisas que pertençam à categoria (posts, produtos, etc.). No caso do Tor, uma entidade vendedora tem muitos produtos.
belongsTo
Isso diz ao modelo que cada entidade dele aponta para uma entidade em outro modelo. Isso é o oposto de hasOne, então um exemplo seria uma entidade de perfil que aponte de volta para uma entidade de usuário correspondente.
hasAndBelongsToMany
Essa associação indica que uma entidade tem muitas entidades correspondentes em outro modelo e também aponta de volta para muitas entidades correspondentes em outro modelo. Um exemplo disso seria uma receita. Muitas pessoas talvez gostem da receita e ela talvez tenha vários ingredientes.

A variável belongsTo nesse caso indica que cada produto na tabela de produtos "pertence a" determinado vendedor.



Voltar para parte superior


Criando um modelo de vendedor

Como a associação indica, um modelo de vendedor também é necessário. O modelo de vendedor será usado depois no Tor para construir a funcionalidade que define as vendas. Enquanto o modelo de produto tem uma associação de belongsTo apontando para um vendedor, o modelo de vendedor tem uma associação com o produto de hasMany.


Listagem 6. O modelo de vendedor tem uma associação com o produto de hasMany
                   
<?php
  class Dealer extends AppModel
  {
    var $name = 'Dealer';
    var $hasMany = array ('Product' => array(
'className' => 'Product',
'foreignKey'=>'dealer_id')
    );
  }
?>
                

Por enquanto, você pode pular o acréscimo de validação de dados, mas à medida que o aplicativo for se desenvolvendo, você talvez tenha ideias de tipos diferentes de validação para acrescentar.



Voltar para parte superior


Criando o controlador de produtos

Você já criou e associou os modelos de produto e vendedor. Agora o Tor sabe como os dados estão inter-relacionados. A seguir, faça seu controlador em app/controllers/products_controller.php —, mas desta vez acrescente a variável de classe $scaffold.


Listagem 7. Acrescentando uma variável de classe ao seu controlador
                    
<?php
class ProductsController extends AppController
{
  var $scaffold;
}
?>
                

Salve o controlador e acesse http://localhost/products (sim, sem criar visualizações ou controlador de Vendedor). Você deve ver algo como o mostrado na Figura 1.


Figura 1. Lista de produtos vazia
Empty product list

Simples assim. Assim, você tem uma interface para a tabela de produtos que lhe permite acrescentar, editar, excluir, alistar, dividir e fatiar seus produtos.

Tente acrescentar um produto. Deverá ser pedido que você insira um título e descrição, além de selecionar um vendedor. Essa lista de vendedores lhe parece familiar? Deveria parecer — você a inseriu na tabela de vendedor logo após criá-la. O scaffolding reconheceu as associações da tabela à medida que você as definiu e gerou automaticamente a lista suspensa de vendedores para você.

Agora volte e olhe a quantidade de código que você escreveu para obter toda essa funcionalidade. Ficou bem mais fácil?



Voltar para parte superior



Ir para a página anteriorPágina 3 de 14 Ir para a próxima página