He buscado y buscado desde que comence a programar en PHP, la mejor manera de comprobar si un email es válido o no, y si esta bien escrito y además que sea de un dominio válido con sus DNS y registros MX correctos. En fin, sonaba imposible, pero navegando y googleando, encontré la solución:
function validateMail($email){ $isValid = true; $atIndex = strrpos($email, '@'); if(is_bool($atIndex) && !$atIndex){ $isValid = false; }else{ $domain = substr($email, $atIndex+1); $local = substr($email, 0, $atIndex); $localLen = strlen($local); $domainLen = strlen($domain); if ($localLen < 1 || $localLen > 64){ $isValid = false; }else if ($domainLen < 1 || $domainLen > 255){ $isValid = false; }else if ($local[0] == '.' || $local[$localLen-1] == '.'){ $isValid = false; }else if (preg_match('/\\.\\./', $local)){ $isValid = false; }else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)){ $isValid = false; }else if (preg_match('/\\.\\./', $domain)){ $isValid = false; }else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) { if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))){ $isValid = false; } } if ($isValid && !(checkdnsrr($domain,'MX') || checkdnsrr($domain,'A'))){ $isValid = false; } } return $isValid; } // Para implementarlo if(validateMail('algun@email.com')){ echo 'email valido'; }else{ echo 'email no valido'; }
Aplica cosas básicas como comprobar la existencia del @, además de RFC para el largo máximo permitido por el estándar y expresiones regulares para validar los simbolos. Y por si fuese poco, chequea que el dominio exista (A) y que sus MX sean válidos.
Quiero recopilar todos los tips (que me acuerdo) de cakePHP, aquellos que nos ayudan a realizar tareas cotidianas y evitar tener que recurrir constantemente a google para poder encontrarlo.
Desde un controlador:
Cambiar el layout
$this->layout = 'nombre_del_layout';
Cambiar la cantidad de resultados del paginador
var $paginate = array('limit'=> 1000); // Definirlo como atributo del controlador y no dentro de un metodo.
Obtener uno o todos los parametros que vienen por la URL
echo $this->params['nombre-del-parametro']; pr($this->params); //La funcion pr es similar a print_r aunque con mas estilo, además, está disponible en cualquier archivo que dependa de cakePHP.
Activar el conector con la base de datos
Esta práctica atenta contra el modelo MVC, por lo cual, si lo usas debe ser en casos muy aislados.
uses('model/connection_manager'); // Agregarlo antes de la definicion de Class... $db = & ConnectionManager::getDataSource('default'); // dentro de un modelo del controlador $db->query('Select * from X');
Redireccion a X lugar
Para mantener el controlador y solo redireccionar el metodo:
$this->redirect(array('action'=>'index'));
Para cambiar el controlador y el metodo
$this->redirect(array('controller' => 'users','action'=>'index'));
Al utilizar el array como parametro, se aplica la Inversa del ROUTES, por ende, si defines que el users/index sea usuarios.html, entonces, la redireccion va a ser contra usuarios.html.
En fin, voy a extender y actualizar este post mientras vaya recopilando mas TIPS.