Opa... Eu sempre menosprezei as expressoes regulares sem entender o poder delas. Elas nao servem apenas para a validacao de dados, como eu achava, pois com poucas coisa voce consegue realizar pesquisas/verificacoes complexas.Uma expressao regular e um padrao formado por simples caracteres alfa-numericos e especiais.Ou seja, a expressao: /[aeiou]/gi, encontraria todas as vogais maiusculas ou minusculas em um determinado texto.Para saber mais sobre a sintaxe eu recomendo a leitura deste artigo do iMasters, http://imasters.com.br/artigo/2515/javascript/regular_expression/, entre outros que voce encontra facilmente no Google. E se quiser "treinar" os seus conhecimentos podera utilizar o http://gskinner.com/RegExr/ para testar seus padroes. Mas o que isso tem haver com o CakePHP? Tem muito! Nao so com o Cake, mas todo programador que se preze deve conhecer o basico de expressoes regulares, pois ela poupa um precioso tempo. Veja um exemplo basico de como usar expressoes regulares no Cake:O $validate aceita regras de validacao customizadas onde podemos utilizar: expressoes regulares ou metodos (funcoes). No proprio book do Cake ele da o exemplo abaixo:var $validate = array( 'login' => array( 'rule' => array('custom', '/[a-z0-9]{3,}$/i'), 'message' => 'Apenas letras e numeros, minimo de 3 caracteres' ));Pensando assim ja podemos imaginar infinitas possibilidades de validacao resolvidas com as benditas Regular Expressions.Por hoje e so, flws Estou comecando a utilizar o Helper Ajax do CakePHP (baixei a versao 1.3.7), que utiliza o Prototype (e o Scriptaculous). Antes eu usava o jQuery para lidar com AJAX no Cake, mas conversando com o Ananias no grupo resolvi implementar alguns metodos do Helper Ajax para conhecer melhor e para testar a sua performance.Bom, neste post pretendo mostrar uma forma de implementar aquele velho select combo de "estado" e "cidade" (ou pais, estado e cidade), onde ao selecionar um determinado "estado" as "cidades" referentes a ele sao carregadas no select abaixo. Veja como fica simples de implementar usando o Helper Ajax.1o) Eu criei duas tabelas: "estados" e "cidades" e criei tambem os respectivos: Models, Controllers e Views para elas. O codigo para criacao das tabelas e:CREATE TABLE `estados` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `estado` varchar(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE `cidades` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `estado_id` int(11) NOT NULL, `cidade` varchar(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;para gerar o MVC usei o BAKE.2o) Criei tambem a tabela "users" e seu MVC usando o bake. Veja o SQL para criacao da tabela:CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` char(40) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;Criei o "users" apenas para servir como ponto de partida para o formulario onde serao carregados os dados de outros modelos (veja que o modelo "User" nao possui relacionamento com "Estado" e nem com "Cidade", e nem vice-versa).3o) Bom, como tudo foi devidamente gerado via bake imagino que voce ja tenha todos os Models, Controllers e View devidamente criados (pelo menos o CRUD - add(), view(), delete() e edit()). 4o) Em ..app/controllers/cidades_controller.php vamos criar a action "listar", veja:function listar($estado_id =