Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

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

Duane O'Brien, PHP developer, 自由职业者
Duane O'Brien é um canivete suíço tecnológico desde quando The Oregon Trail era somente texto. Sua comida favorita é sushi. Ele nunca esteve na lua.
(Um autor Contribuidor do IBM developerWorks)

Resumo:  O CakePHP é uma ajuda estável, pronta para produção, de desenvolvimento rápido para construir Web sites em PHP. Esta série "Crie Web sites rapidamente com CakePHP" mostra como construir um catálogo de produtos on-line usando o CakePHP.

Visualizar mais conteúdo nesta série

Data:  02/Jun/2009 (Publicado em: 12/Dez/2006)
Nível:  Intermediário

Atividade:  33457 visualizações

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.


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.


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.


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.


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?

3 de 13 | Anterior | Próximo

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=395935
TutorialTitle=Crie Web sites rapidamente com CakePHP, Parte 2: Faça mais e melhor com CakePHP
publish-date=06022009
author1-email=d@duaneobrien.com
author1-email-cc=ruterbo@us.ibm.com