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:  33413 visualizações

Definindo ACOs

Agora que o Tor está com os AROs definidos, é hora de identificar e definir seu ACO. Neste caso, você vai definir ACOs para representar produtos, organizando-os em grupos como fez com os AROs.

Acrescentando a definição de ACO ao controlador de produtos

Você vai acrescentar a definição inicial de ACO ao controlador de produtos na função add, de modo similar ao que fez com a definição do ARO no registro de usuário. No momento, a função add é exatamente o que o Bake lhe forneceu. Deve ser algo parecido à Listagem 13.


Listagem 13. Função add
                   
       function add() {
if (!empty($this->data))
{ $this->cleanUpFields();
$this->Product->create();
if ($this->Product->save($this->data)) {
$this->Session->setFlash('The Product
     has been saved', true));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('The Product could not be
     saved. Please, try again.', true));
}
}
$dealers = $this->Product->Dealer->find('list');
$this->set(compact('dealers'));
}

Novamente, o CakePHP simplifica muito o acréscimo da definição aos seus ACOs. Você começa acrescentando a variável de classe $components ao controlador, como fez para o controlador de usuários.


Listagem 14. Acrescentando a variável de classe $components ao controlador
                    
<?php
class ProductsController extends AppController
{
  var $components = array('Acl');
  ...

Criar um ACO é quase idêntico a criar um ARO. Você chama o método create no objeto de ACL ACO. Desta vez, o alias precisa ser mais do que apenas o título do produto, visto que ele talvez não seja único. Em vez disso, use uma combinação de identificação e título de produto para o alias. O modelo será o Produto, o foreign_key será a nova identificação do produto e o parent_id será a identificação do vendedor que inseriu o produto (você ainda não configurou isso, mas vai fazê-lo em breve). Colocando esses pedaços na sua função add, deve parecer à Listagem 15.


Listagem 15. Nova função add
                    
function add() {
if (!empty($this->data)) {
$this->cleanUpFields();
$this->Product->create();
if ($this->Product->save($this->data)) {
$dealer = $this->Product->Dealer->read(null,
     $this->data['Product']['dealer_id']);
$parent = $this->Acl->Aco->findByAlias($dealer
								    ['Dealer']['title']);
$this->Acl->Aco->create(array(
'alias' =>
		 $this->Product->id.'-'.$this->data['Product']['title'],
'model' => 'Product',
'foreign_key' => $this->Product->id,
'parent_id' => $parent['Aco']['id'])
);
$this->Acl->Aco->save();
$this->Session->setFlash('The Product
      has been saved');
$this->redirect(array('action'=>'index'),
      null, true);
} else {
$this->Session->setFlash('The Product could not
      be saved. Please, try again.');
}
}
$dealers = $this->Product->Dealer->generateList();
$this->set(compact('dealers'));
}
                

Isso deve ser tudo o que é necessário para criar automaticamente os ACOs para os produtos criados no Tor. Antes de continuar, você deve criar ACOs para os produtos e grupos existentes.


Acrescentando definições de ACO para os vendedores

Pode-se usar o Cake Console parta definir ACOs mais ou menos da mesma maneira em que foi usado para definir os AROs para os usuários existentes. Será útil usar a lista de produtos que o CakePHP preparou para você em http://localhost/products.

Mais uma vez, na linha de comando, no diretório /webroot/app, você vai executar alguns comandos create. Comece criando grupos para representar os vendedores que você criou lá atrás, ao criar a tabela de vendedores. Mas desta vez, especifique que está criando um ACO.

../cake/console/cake acl create aco root "Tor Johnson School Of Drama"

../cake/console/cake acl create aco root "Chriswell's Psychic Friends"
                

Você pode executar ../cake/console/cake acl view aco para verificar se os grupos têm a aparência esperada.


Figura 11. Dump de ACO com vendedores sem produtos
ACO dump with dealers no products

A seguir, exclua os produtos existentes da tabela de produtos. Você deve poder fazer isso indo até o índice de produtos (http://localhost/products/index) e clicando em Excluir ao lado de cada produto.

Visto que você só criou uns dois produtos até agora, recriá-los é o caminho mais curto para acrescentar os ACOs que deseja. Ainda não teste aquela função de novo produto add. Agora que os ACOs estão criados para os vendedores existentes e que você excluiu os produtos existentes, você está pronto para continuar a configurar algumas permissões.

6 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