Insertar varios emails en un campo

Hola, quisiera poner en las rules de un model que un campo acepta una dirección de email o más, separadas por coma, y que se compruebe que son válidas al ser introducidas desde el formulario.

Gracias y un saludo

Tendras que crear un ‘custom’ validator




// en rules

 array('emails', 'validateEmails'),


//....


function validateEmails($attribute, $params){

    if($this->hasErrors($this->{$attribute} || empty($this->{$attribute}) 

           return; // you do whatever


    // aqui tu funcion para validar los emails 

    // mira CEmailValidator para ideas de como validar

    // si no pasa la validacion: $this->addError('attributename','error');

}



Cheers

Muchas gracias Billy el rápido

He hecho así el validate, según he entendido tu explicación y parece que funciona, si lo puedo mejorar agradezco cualquier sugerencia:

function validateEmails($attribute, $params){

if($this->hasErrors($this->{$attribute}) || empty($this->{$attribute}))

  return $this->addError($attribute,'lista de emails incorrecta'); // you do whatever

$pattern=’/^[a-zA-Z0-9!#$%&\’+\\/=?^_{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+\\/=?^_{|}~-]+)@(?:a-zA-Z0-9?\.)+a-zA-Z0-9?$/’;

$emails= explode (’,’,$this->{$attribute});

for ($i=0;$i<count($emails);$i++)

{

  &#036;valid=is_string(trim(&#036;emails[&#036;i])) &amp;&amp; strlen(trim(&#036;emails[&#036;i]))&lt;=254 &amp;&amp; (preg_match(&#036;pattern,trim(&#036;emails[&#036;i])));


  if (&#33;&#036;valid)


     break;

}

if(!$valid)

  return &#036;this-&gt;addError(&#036;attribute,'lista de emails incorrecta'); // you do whatever

return TRUE;

}

Yo modificaría la función ligeramente :) - solo por fastidiar




function validateEmails($attribute, $params){

    if($this->hasErrors($this->{$attribute}))

       return;

    if (empty($this->{$attribute})) // no permitido si esta vacio

       return $this->addError($attribute,'lista de emails no puede estar vacia'); 


    $pattern='/^[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/';


     $emails= explode (',',$this->{$attribute}); // solo comas? y puntos y comas no? <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />


     foreach($emails as $email)

     {

        if(!(is_string(trim($emails[$i])) && strlen(trim($emails[$i]))<=254 && (preg_match($pattern,trim($emails[$i]))))

           return $this->addError($attribute,'lista de emails incorrecta');

     }


}



Totalmente no ‘testada’

Un saludo…

PS: Billi el rápido? :)