Avançar para a área de conteúdo

Bem-vindo ao developerWorks. Se você não possui um ID IBM e senha, Registre-se aqui.

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

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Esse perfil inclui o primeiro nome, o sobrenome e o nome de exibição identificado quando você se registrou no developerWorks. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

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

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.

Prepare Web Sites com Rapidez Utilizando CakePHP, Parte 1: Introdução

Auxílio no Desenvolvimento Rápido e Fácil de PHP

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:  CakePHP é um auxílio estável de desenvolvimento rápido e pronto de produção para a construção de Web sites em PHP. Esta série "Prepare Web Sites com Rapidez Utilizando CakePHP" mostra como construir um catálogo de produtos on-line utilizando CakePHP.

Visualizar mais conteúdo nesta série

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

Comentários:  

Design do MVC

Neste ponto, é bastante comum se envolver e começar a produzir código com base naquilo que o aplicativo deve fazer. Uma página de login, um banco de dados e um registro — Pronto! Simples assim. E geralmente é. Até você querer mudar a forma como ele interage com o banco de dados, alterar regras de validação ou não alterar essencialmente nada no aplicativo. Então as coisas começam a se complicar.

O CakePHP foi projetado para deixar a gravação de um aplicativo o mais fácil possível, enquanto oferece a você algo que possa ser mantido a longo prazo. O tutorial mostrará como construir o Tor utilizando o padrão de design do MVC. O CakePHP mostrará como isso pode ser fácil. Você vai ver porque isso faz sentido.

O padrão de design do MVC divide um aplicativo em três camadas distintas: Gerenciamento de dados, UI e Lógica, respectivamente. O MVC foi descrito primeiro no livro Padrões de Design: Elementos de Software Orientado a Objetos Reutilizáveis , também conhecido como o livro "Gang Of Four". Uma discussão completa sobre padrões de design e MVC está fora do escopo deste tutorial, mas será útil saber o que essas três partes significam — especificamente, no mundo do CakePHP.

Modelo

Usuários, produtos, preços, mensagens — quando você resume isso tudo, eles são apenas dados. Você se certifica de que esses são os dados que você quer, eles entram em um banco de dados e você tem que resgatá-los novamente. Será muito útil que todos os aspectos de manipulação de dados do Tor fiquem em um único lugar. É aí que entra o modelo.

A principal preocupação do modelo é a manipulação de dados. Obter dados de um banco de dados, inserir dados em um banco de dados, validar dados — tudo isso acontece dentro de um modelo.

Um modelo individual normalmente é utilizado para acessar uma tabela específica no banco de dados. Geralmente, um modelo é associado a uma tabela de banco de dados se o nome da tabela for uma forma no plural do nome do modelo. Por exemplo, um modelo Produto será, por padrão, associado a uma tabela Produtos.

Todos os modelos definidos pelo usuário estenderão a classe AppModel do CakePHP.


O Modelo de Usuário

Após criar uma tabela de usuários para o Tor, você vai precisar utilizar um modelo de usuário para interagir com a tabela. O modelo de usuário salvará seus dados de usuário, os resgatará da tabela para você e verificará se os dados do usuário estão em um formato aceitável. Por enquanto, este modelo pode ser um stub. Ele deve ser criado como app/models/user.php e pode ser semelhante à Listagem 8.


Listagem 8. O Modelo de Usuário
<?php
class User extends AppModel
{
        var $name = 'User';
}
?>
                

Observe a linha var $name = 'User';. Ela é aceita como melhor prática para especificar o nome do modelo em $name.


Visualização

Poder salvar, recuperar e validar seus dados são coisas totalmente inúteis sem alguns meios de exibição de dados. Ao colocar todo o código de exibição e apresentação em um lugar, você pode alterar a aparência e o comportamento do seu aplicativo sem precisar de uma solução alternativa para a lógica de aplicativo e o código relacionado aos dados.

A visualização preocupa-se principalmente com a formatação de dados para apresentação para o usuário. A visualização representa todo e qualquer trabalho da UI, incluindo todos os modelos e HTML. Os arquivos de visualização do CakePHP são arquivos HTML regulares integrados ao código de PHP.

Por fim, uma visualização é apenas um modelo de página. Geralmente a visualização é nomeada depois de uma ação associada a ela. Por exemplo, uma ação display() normalmente teria uma visualização de exibição.

Retornando ao aplicativo de amostra, criamos uma tabela de usuários e um modelo de usuário para interagir com essa tabela. Agora precisamos de algumas visualizações. O usuário vai precisar registrar uma conta e efetuar login no aplicativo. Isso demanda uma visualização de registro e login.


A Visualização de Registro

Antes de um usuário poder utilizar o aplicativo Tor, ele vai precisar registrar uma conta. Isso vai exigir uma visualização de registro, que apresentará o formulário de registro ao usuário. Você já deve saber que tipo de informações sobre o usuário o Tor está procurando — especificamente, você vai precisar coletar um nome de usuário, uma senha, um endereço de e-mail e o primeiro e último nomes.

A visualização de registro deve ser criada como app/views/users/register.ctp e pode ser semelhante à Listagem 9.


Listagem 9. A Visualização de Registro
<form action="/users/register" method="post">
<p>Please fill out the form below to register an account.</p>
<label>Username:</label><input name="username" size="40" />

<label>Password:</label><input type="password" name="password" size="40"
/>

<label>Email Address:</label><input name="email" size="40"
maxlength="255" />

<label>First Name:</label><input name="first_name" size="40" />

<label>Last Name:</label><input name="last_name" size="40" />

<input type="submit" value="register" />
</form>
                

É importante notar que os nomes de campo são os mesmos que os nomes de coluna em seu banco de dados. Isso se tornará um fator importante quando chegarmos ao controlador de usuários. Mais tarde, quando aprender um pouco mais sobre o Cake e vir como o Cake Helpers funciona, você vai regravar esta página completamente, mas, por enquanto, esta página é uma HTML regular, como provavelmente você sempre gravou.


Controlador

Com a manipulação de dados toda contida no modelo, e a camada de apresentação toda contida na visualização, o restante do aplicativo viverá no controlador. É aí que o aplicativo 'faz' coisas — lógica, tomada de decisões, fluxo de trabalho, etc. O modelo gerencia seus dados, a visualização os mostra para você e o controlador faz todo o resto.

O controlador gerencia pedidos do servidor. Ele aceita entrada do usuário (pedidos de URL, forma POSTs, pedidos GET, etc.), aplica lógica onde necessário, invoca modelos onde a manipulação de dados é necessária e envia saída através da visualização apropriada.

Geralmente um controlador gerencia lógica para um único modelo. Um controlador contém qualquer número de funções, referidas como ações. Uma ação normalmente aplica lógica e exibe uma visualização. Todos os controladores definidos pelo usuário precisarão estender a classe AppController do CakePHP.

No Tor, você criou uma tabela de usuários, um modelo de usuário para interagir com a tabela e visualizações para apresentar formulários de registro e login para o usuário. Esses formulários serão enviados aos controladores de usuários, invocando as ações register e login, respectivamente. Os controladores de usuários devem ser criados como app/controllers/users_controller.php e começar com um aspecto semelhante à Listagem 10.


Listagem 10. O Controlador de Usuários
<?php
class UsersController extends AppController
{
}
?>
                


A Ação register

Agora você tem um controlador. Mas por enquanto ele não está fazendo nada. Antes que ele faça qualquer coisa por você, você terá que dar a ele algumas ações para executar. Agora você está registrando os aspectos práticos. O usuário preencheu um formulário e o enviou ao aplicativo. Cobriremos a validação de dados mais tarde, mas por enquanto, apenas colocaremos os dados de registro no banco de dados. Isso é feito incluindo a ação register no controlador de usuários.


Listagem 11. A Ação register
<?php
class UsersController extends AppController
{
  function register()
  {
    if (!empty($this->params['form']))
    {
      if ($this->User->save($this->params['form']))
      {
        $this->flash('Your registration information was accepted.',
'/users/register');
      } else {
        $this->flash('There was a problem with your registration',
'/users/register');
      }
    }
  }
}
?>

A ação register começa examinando o formulário ($this->params['form']) para saber se ele foi enviado. Se o formulário não foi enviado, a ação não executará nada. Quando você souber que o formulário foi enviado com dados, o controlador chamará o método save no modelo de usuário, que é uma extensão de AppModel. O método save irá, por padrão, procurar uma tabela que seja o plural do próprio modelo. Nesse caso, ele está procurando uma tabela de usuários para acompanhar o modelo de usuário. Se a tabela for localizada, o método save transformará a array passada ($this->params['form']) em uma instrução INSERT utilizando as chaves de array como nomes de colunas e os valores de array como os valores INSERT.

Quando você souber que o formulário foi enviado com dados, o controlador chamará o método save no modelo de usuário, que é uma extensão de AppModel. O método save irá, por padrão, procurar uma tabela que seja o plural do próprio modelo. Nesse caso, ele está procurando uma tabela de usuários para acompanhar o modelo de usuário. Se a tabela for localizada, o método save transformará a array passada ($this->params['form']) em uma instrução INSERT utilizando as chaves de array como nomes de colunas e os valores de array como os valores INSERT. Nesse caso, $this->params['form'] será semelhante à Listagem 12.


Listagem 12. A Ação $this->params['form']
Array
(
    [username] => zaphod
    [password] => secret
    [email] => beeblebrox@heartofgold.hhg
    [first_name] => zaphod
    [last_name] => beeblebrox
)
                

O método save construirá uma instrução INSERT a partir do restante. Ela será semelhante à Listagem 13.


Listagem 13. INSERT statement
INSERT INTO 
 users 
(username, password, email, first_name, last_name) 
VALUES
('zaphod', 'secret', 'beeblebrox@heartofgold.hhg', 'zaphod', 'beeblebrox')
                

Agora deve estar evidente porque você utilizou os nomes de colunas de banco de dados na visualização de registro para os nomes de campos de formulário de registro. Fazendo isso, você simplificou o processo de salvamento de seus dados de forma significativa.

Para continuar, se os dados forem inseridos com sucesso, a ação register chamará o método Flash. O Flash apresenta uma mensagem básica para o usuário (nesse caso, uma mensagem de êxito ou falha) com um link a partir da mensagem (nesse caso, de volta para a visualização de registro, desde que nada mais tenha sido definido).

Agora que você tem um modelo de usuário para criar uma interface com sua tabela de usuários, uma visualização de registro para mostrar um formulário de registro e um controlador de usuários com uma ação register, é possível ver de fato seu aplicativo em ação.


Experimente

Todas as partes se encaixaram no devido lugar. É hora de trazer Tor para a vida. Inicie seu navegador e comece.

Carregue a visualização de registro acessando http://localhost/users/register. Você deverá ver algo semelhante à Figura 4.


Figura 4. Carregando a Visualização de Registro
Carregando a Visualização de Registro

Preencha e envie o formulário. Você deverá ver uma mensagem de êxito.


Figura 5. Mensagem de Sucesso
Mensagem de Sucesso

Se olhar seu banco de dados, você verá um registro correspondente ao envio do seu formulário, preenchido com uma senha de texto simples (uma ideia terrível que será consertada posteriormente).

Tente preencher o formulário novamente utilizando as mesmas informações. Você deverá ver uma mensagem de falha.


Figura 6. Falha de Registro
Falha de Registro

Se estiver utilizando um banco de dados que suporte a restrição de campo UNIQUE, o registro falhará. Durante a criação da tabela de usuários, os campos de nome de usuário e e-mail foram definidos como UNIQUE, o que significa que valores para esses campos não podem ser duplicados. O CakePHP reconhece o erro quando o banco de dados o emite e exibe um erro.

3 de 10 | Anterior | Próximo

Comentários



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=397006
TutorialTitle=Prepare Web Sites com Rapidez Utilizando CakePHP, Parte 1: Introdução
publish-date=06022009
author1-email=d@duaneobrien.com
author1-email-cc=ruterbo@us.ibm.com

Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).