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 4 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


Usando o gerador de código Bake

Não é necessário descartar totalmente tudo o que o scaffolding lhe fornecer. Usando o Bake, o gerador de código do CakePHP, você pode gerar um controlador que contenha funções que representem a funcionalidade do scaffolding e as visualizações que a acompanham. Para as partes do Tor relacionadas a produtos, isso economizará muito tempo.

No CakePHP V1.1, o Bake era um script PHP que você chamava diretamente. No CakePHP V1.2, a funcionalidade do Bake foi movida para o Cake Console, com o qual você se familiarizará no restante deste tutorial. Você pode simplificar a vida se acrescentar o caminho /webroot/cake/console à sua variável de ambiente PATH. Isso lhe permitirá chamar o Cake Console sem especificar as informações de caminho. Você não precisa fazer isso, e o tutorial presumirá que você não fez. Além disso, você deve executar o Cake Console a partir do seu diretório app de aplicativo, — no caso: /webroot/app —, ou o Cake Console achará que você está tentando fazer algo novo.

Antes de continuar, faça uma cópia do seu diretório app existente. O Bake vai sobrescrever o controlador dos produtos, e é sempre necessário fazer backup dos seus arquivos quando a operação envolver a palavra "sobrescrever" (ou as palavras "copiar", "excluir", "formatar" ou "vodu"). Se tiver problemas para fazer isso funcionar, certifique-se de que o executável php esteja na sua variável de ambiente PATH.

Usando o Bake no seu controlador de produtos

Para usar o Bake, cd no diretório /webroot/app e abrir o Cake Console: ../cake/console/cake bake. Deve aparecer uma tela que se parece à Figura 2.


Figura 2. Menu do Bake
Bake menu

Para o aplicativo Tor, o modelo que você escreveu deve ser o suficiente, então vamos começar com o controlador. Pressione C para selecionar o controlador. O Cake Console vai dar uma olhada no aplicativo como está e apresentar uma lista de controladores possíveis que você talvez queira submeter ao Bake.


Figura 3. Nome do controlador
Controller name

Nesse caso, você está criando o controlador de produtos, que seria o controlador N° 2. O Bake vai perguntar se você quer construir o controlador interativamente. Por enquanto, pressione N para deixar o Bake tomar todas as decisões sozinho, mas, mais tarde, tente construir o controlador interativamente para entender o que o Bake pode fazer para você além disso. O Bake vai perguntar então se você quer incluir alguns métodos de classe básicos (veja a Figura 4). Pressione Y — porque obter esse código é a principal razão de você estar aqui. A seguir, o Bake lhe perguntará se você quer criar métodos para administrar roteamento. Pressione N — visto que você não precisa deles no momento. O Bake lhe pedirá para confirmar o controlador antes de continuar. Quando você continuar, o Bake se certificará se você deseja sobrescrever o controlador existente (nesse caso, você deseja). O Bake deverá informá-lo então que criou o arquivo \app\controllers\products_controller.php e lhe perguntará se você deseja criar alguns arquivos de teste da unidade. Você pode ignorar isso por enquanto. Quando terminar, você retornará ao menu do Bake.


Figura 4. Controlador criado
Controller created

Isso é tudo. Saia do Cake Console, abra app/controllers/products_controller.php e dê uma olhada no que o Bake fez para você. Deve ser algo parecido à Listagem 8.


Listagem 8. products_controller.php após o Bake
                    
class ProductsController extends AppController {

    var $name = 'Products';
    var $helpers = array('Html', 'Form' );

    function index() {
  $this->Product->recursive = 0;
  $this->set('products', $this->paginate());
    }

    function view($id = null)
{ if (!$id) {
  $this->Session->setFlash('Invalid Product.');
  $this->redirect(array('action'=>'index'));
}
$this->set('product', $this->Product->read(null, $id));

}

function add() {
if (!empty($this->data)) {
   $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'));
    }

function edit($id = null){
if (!$id && empty($this->data)) {
    $this->Session->setFlash('Invalid Product', true));
    $this->redirect(array('action'=>'index'));
}
if (!empty($this->data)) {
    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));
}
}
if (empty($this->data)) {
    $this->data = $this->Product->read(null, $id);
}
$dealers = $this->Product->Dealer->generateList();
$this->set(compact('dealers'));
    }

function delete($id = null) {
   if (!$id) {
   $this->Session->setFlash('Invalid id for Product', true));
   $this->redirect(array('action'=>'index'));
   }
   if ($this->Product->del($id)) {
   $this->Session->setFlash(__('Product deleted', true));
   $this->redirect(array('action'=>'index'));
}
}
}
?>

Esse controlador que você gerou usando o Cake Console contém a mesma funcionalidade básica que você obteve pelo scaffolding, mas agora você pode ajustá-lo às suas necessidades. Bem fácil. Pronto para outra?



Voltar para parte superior


Usando o Bake nas suas visualizações de produtos

Agora que você usou o Bake no seu controlador de produtos, tudo o que o Tor necessita é algumas visualizações de produtos. O Bake também fará isso para você. Comece como antes no seu diretório /webroot/app: ../cake/console/cake bake.

O menu inicial do Bake deve ser idêntico a quando você o usou no controlador. Desta vez, porém, é hora de preparar algumas visualizações. Pressione V para selecionar visualizações. Aparecerá outra lista de visualizações possíveis a serem criadas. Os produtos ainda devem ser o N.° 2 da lista. O Bake lhe perguntará se você deseja criar algumas visualizações de scaffolding (Sim/Y) e se deseja criar visualizações para administrar roteamento (Não). Mais tarde você pode voltar e brincar com as diferentes opções do Bake.

Depois dessas duas opções, o Bake deverá lhe informar que criou as visualizações.


Figura 5. O Bake informa você que criou as visualizações
Bake informs you that it has created the views

Saia do Cake Console, abra a visualização app/views/products/index.ctp e dê uma olhada. Deve ser algo parecido à Listagem 9.


Listagem 9. O índice
                   
<div class="products">
<h2><?php __('Products');?></h2>
<p>
<?php
echo $paginator->counter(array(
'format' => __('Page %page% of %pages%, showing %current%
records out of %count% total, starting on record %start%, ending on %end%', true)
));
?></p>
<table cellpadding="0" cellspacing="0">
<tr>
<th><?php echo $paginator->sort('id');?></th>
<th><?php echo $paginator->sort('title');?></th>
<th><?php echo $paginator->sort('dealer_id');?></th>
<th><?php echo $paginator->sort('description');?></th>
<th class="actions"><?php __('Actions');?></th>
</tr>
<?php
$i = 0;
foreach ($products as $product):
$class = null;
if ($i++ % 2 == 0) {
$class = ' class="altrow"';
}
?>
<tr<?php echo $class;?>>
<td>
      <?php echo $product['Product']['id'] ?>
</td>
<td>
<?php echo $product['Product']['title'] ?>
</td>
<td>
      <?php echo $html->link(__($product['Dealer']
['title'], true), array('controller'=> 'dealers', '
action'=>'view', $product['Dealer']['id'])); ?>
</td>
<td>
<?php echo $product['Product']['description'] ?>
</td>
<td class="actions">
     <?php echo $html->link(__('View', true),
array('action'=>'view', $product['Product']['id'])); ?>
     <?php echo $html->link(__('Edit', true),
array('action'=>'edit', $product['Product']['id'])); ?>
     <?php echo $html->link(__('Delete', true),
array('action'=>'delete', $product['Product']['id']),
null, sprintf(__('Are you sure you want to delete
#%s?', true),
$product['Product']['id'])); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
<div class="paging">
<?php echo $paginator->prev('<< '.__('previous', true),
 		   array(), null, array('class'=>'disabled'));?>
 |      <?php echo $paginator->numbers();?>
<?php echo $paginator->next(__('next', true).' >>',
 		   array(), null, array('class'=>'disabled'));?>
</div>
<div class="actions">
<ul>
        <li><?php echo $html->link(__('New Product', true),
                       array('action'=>'add')); ?></li>
         <li><?php echo $html->link(__('List Dealers', true),
                       array('controller'=> 'dealers', 'action'=>'index'));
                       ?> </li>
         <li><?php echo $html->link(__('New Dealer', true),
                       array('controller'=> 'dealers', 'action'=>'add')); ?>
</li>
</ul>
</div>
                

Dê uma olhada também nas outras visualizações. É um monte de coisas que você não precisou escrever. Mais tarde, você vai ajustar essas visualizações para ajudar a bloquear o Tor.

Faça um "test drive"

Você criou um controlador e as visualizações necessárias para a funcionalidade dos produtos. Faça um teste. Comece por http://localhost/products e passe pelas várias partes do aplicativo. Acrescente um produto. Edite um. Exclua outro. Visualize um produto. Deve parecer exatamente como quando você usava o scaffolding.



Voltar para parte superior


Faça mais e melhor

Isso não chega nem perto de tudo o que o Bake pode fazer por você. Haverá exercícios no fim do tutorial para deixar que você se aventure sozinho. Tenha em mente que o código gerado pelo Bake deve ser seu ponto de partida, não o fim do seu trabalho de desenvolvimento. Mas ajuda a poupar muito tempo se usado adequadamente.



Voltar para parte superior



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