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:  

Validação de dados do CakePHP

Agora você vai dar uma rápida olhada na validação de dados do CakePHP inserindo um pouco de validação de dados para usuários com base em expressões regulares definidas. Ao definir suas próprias expressões regulares para validação de dados, você pode exercer um controle maior sobre os critérios de concluir/falhar para campos de formulário individuais no Tor.

O Modelo de Usuário do Tor

Dê outra olhada no modelo de usuário.


Listagem 21. O Modelo de Usuário
<?php class User extends AppModel {
  var $name = 'User';
  var $validate = array(
    'username' => VALID_NOT_EMPTY,
    'password' => VALID_NOT_EMPTY,
    'email' => VALID_EMAIL
  ); } ?>
                

Este é um bom começo, mas não é suficiente. Você vai querer se certificar de que os comprimentos de campos sejam respeitados e de que o nome de usuário ainda não exista. Isso será feito através da definição de suas próprias expressões regulares para validação e definição de uma função para verificar um nome de usuário em uma tabela de usuários antes de salvar o usuário.


Expressões Regulares (Resumo)

Uma discussão completa sobre expressões regulares está fora do escopo deste tutorial. O Manual de PHP contém informações sobre expressões regulares em PHP e você deve revisá-lo antes de querer ir mais longe na criação de suas próprias expressões regulares de validação de dados. Consulte Recursos para conhecer alguns links úteis.

Aexpressão regular é basicamente um padrão de caracteres utilizados para comparar uma cadeia com outra. Por exemplo, o caractere * em uma expressão regular corresponderá a qualquer caractere, inúmeras vezes. Se você não souber nada sobre expressões regulares, não se preocupe. O exemplo abaixo servirá como introdução.

Crie Sua Própria Validação

O CakePHP fornece algumas expressões regulares de validação de dados integradas, incluindo:VALID_NOT_EMPTY, VALID_NUMBER, VALID_EMAIL e VALID_YEAR. Essas constantes são definidas em cake/libs/validators.php e não devem ser modificadas, embora você possa achar útil revisá-las.

Para os campos de nome de usuário e senha, você precisa validar se os dados enviados não têm mais de 40 caracteres de comprimento. Também é muito útil verificar se o nome de usuário e a senha têm pelo menos seis caracteres. Uma expressão regular para corresponder a cadeias com um comprimento entre seis e 40 caracteres seria semelhante a esta: /^.{6,40}$/.

Lendo essa expressão regular da esquerda para a direita:

  • /— Marca o início da expressão regular
  • ^— Quer dizer do início da cadeia
  • .— Quer dizer qualquer outro caractere
  • {6,40}— Quer dizer pelo menos seis vezes, mas não mais de 40 vezes
  • $— Quer dizer e a cadeia termina
  • /— Marca o final da expressão regular

Portanto, lida como um todo, essa expressão regular quer dizer "do início da cadeia, um ou mais caracteres, pelo menos seis mas não mais que 40, e a cadeia termina."

Para colocar a expressão regular em uso (consulte a Listagem 22), substitua as instâncias de VALID_NOT_EMPTY pela expressão regular, entre aspas (para impedir o PHP de tentar interpretar quaisquer caracteres especiais).


Listagem 22. Expressão Regular em Script PHP
<?php
class User extends AppModel
{
  var $name = 'User';

  var $validate = array(
    'username' => '/^.{6,40}$/',
    'password' => '/^.{6,40}$/',
    'email' => VALID_EMAIL
  );
}
?>

Certifique-se de ter salvado todos os seus arquivos, retorne para http://localhost/users/register e tente registrar um usuário com um nome de usuário de quatro caracteres. Você deverá ver algo semelhante à Figura 11.


Figura 11. Validação de Dados
Validação de Dados

Expressões regulares são versáteis, mas não podem fazer coisas como dizer a você se um nome de usuário já foi registrado.


Levando a Validação Adiante

Às vezes você não consegue dizer se um dado é válido apenas olhando para ele. Por exemplo, o nome de usuário pode ter entre seis e 40 caracteres, mas você terá que verificar o banco de dados para saber se o nome de usuário já foi utilizado. O CakePHP fornece a capacidade de marcar manualmente um campo como inválido. Dê uma olhada no método beforeValidate na Listagem 23. Esse método seria incluído no modelo de Usuário.


Listagem 23. Validar o Nome do Usuário
 function beforeValidate() {
    if (!$this->id) {
        if ($this->findCount(array('User.username'
		                => $this->data['User']['username'])) > 0) {
            $this->invalidate('username_unique');
            return false;
        }
    }
    return true;
}
                

Esse método diz ao modelo que antes de qualquer validação ser executada, é necessário fazer uma verificação para saber se os dados enviados possuem um ID. Se não houver um ID, procure outros usuários com o mesmo nome de usuário. Se houver algum, marque o campo de nome de usuário inválido e ignore qualquer validação restante (return false). Você pode tirar o máximo proveito disso alterando a linha de entrada do nome do usuário na visualização register.ctp para o seguinte.


Listagem 24. Nova Linha de Entrada de Nome de Usuário
 echo $form->input('username', array('after' => $form->error
       ('username_unique', 'The username is taken. Please try again.')));
	   

Isso diz à visualização de registro o que fazer quando encontrar mensagens de erro chamadas 'username_unique' que você designou no método beforeValidate.

Salve seus arquivos e tente novamente. Acesse http://localhost/user/knownusers para obter uma lista de usuários existentes. Em seguida, acesse http://localhost/user/register e tente criar um com o mesmo nome de usuário. Você deverá ver o seguinte.


Figura 12. Validação de Dados com Êxito
Validação de Dados com Êxito

Uma boa validação de dados é uma etapa importante na criação de qualquer aplicativo seguro. Conforme você constrói o aplicativo Tor, procure oportunidades para melhorar a validação de dados. Não tenha medo de inserir mais validação de dados do que a demonstrada neste tutorial. Nunca acredite que seus usuários estão enviando os dados que você pediu. Valide tudo. O CakePHP facilita isso.

5 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).