Hice esta pregunta en este si luego otra cosa para mostrar 2 vistas en una función llamada hilo y he intentado solucionarlo como se me sugirió, pero el problema persiste. Espero que alguien me pueda ayudar ... ¿Hace tanto de lo que tiene dentro del "si" como de lo que tiene dentro del "otro"?

Tengo un pequeño problema con la función de redireccionamiento, tengo una función de controlador llamada "someview" y también creé un archivo de vista con el mismo nombre (someview.ctp). La función del controlador hará algunas cosas (consultar datos del modelo). se puede describir simplemente de la siguiente manera

function someview()
{
    $result=$this->User->getdatafrommodel();
    if(!empty($result))
    {
        //do something
                    sendmail(.....);
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

También creé una página llamada "usernotexist.ctp" que me gustaría mostrar alguna información sobre cuándo el usuario especificado no existe en el sistema de base de datos. Sin embargo, mi función anterior (someview) siempre ejecuta "if" y "else" después de que se llama. Si elimino la parte "else" en esa función, entonces funcionará correctamente para mí; se muestra la página denominada "someview.ctp". El valor de $ result devuelto por la función getdatafrommodel es correcto. Gracias por cualquier ayuda.

ACTUALIZAR
esto funciona:

    function someview()
{
    $result=$this->User->getdatafrommodel();
            print_r($result);
            exit();
    if(!empty($result))
    {
        //do something
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

Esto imprime una matriz vacía.

    function someview()
{
    $result=$this->User->getdatafrommodel();
            print_r($result);
    if(!empty($result))
    {
        //do something
    }
    else
    {
        $this->redirect(array('action'=>'usernotexist'));
    }
}

function usernotexist()
{
    $this->loadSkin();
}

[ ACTUALIZACIÓN ]

Lo que veo después de hacer clic en un enlace en una vista llamada "carpeta / subcarpeta / alguna vista" para llamar al método del controlador como describí anteriormente, la página en el "ELSE" se redirige. PERO en la parte SI también incluyo una función "Sendmail" para enviar un correo electrónico a mi cuenta. El sendmail FUNCIONA. Eso es lo extraño que me gustaría entender. Claramente, SI entonces Else ambos se ejecutan.

Lo que me gustaría hacer es justo después de que el usuario haga clic en el enlace para activar el método del controlador (someview), si la consulta devuelve un registro vacío, se me dirigirá a la página "usernotexist" o le enviaré un correo electrónico.

Para su preocupación, acepto publicar el código fuente original, creo que la función sendmail podría estar cometiendo algún error en algún lugar en el que actualmente no puedo reconocer su lugar.

Aquí es

    function newpassword()
    {
        $this->loadSkinForAction();
        $result=$this->EwtUser->get_user_from_email($_POST['email']);

        if(!empty($result))
        {
            $userid = $result[0]['ewt_users']['id'];
            $password=$this->EwtUser->get_and_change_user_password($_POST['email']);            
            $mail="Your new password is: ".$password."<br/>Please use it for next login.<br/>You are recommended to change this password again in your 'Personal Profile' section.";
            $this->sendmail($userid,$mail,$_POST['email']); 
        }
        else
        {
            //print_r($result);
            $this->redirect(array('action'=>'userexists'));
        }
    }

    function userexists()
    {
        $this->loadSkinForAction();     
    } 

Y la función de modelo para consultar datos

function get_and_change_user_password($email)
    {
        $password=$this->genRandStr();
        $sql=sprintf("UPDATE ewt_users SET password='%s' WHERE email='%s'",md5($password),$email);
        $this->query($sql);
        return $password;
    }

Y aquí está la función sendmail,

function sendmail($userid, $reportcontent,$email){
        //if($this->Session->read($this->_userName))
        {
            $this->loadModel('EwtMailtemplate');
            $this->loadModel('EwtUser');
            $this->loadModel('EwtSetting');
            $this->autoRender = false;

            $date = date("Y-m-d");
            $userinfo = $this->EwtUser->read(null, $userid);
            $fullname = $userinfo['EwtUser']['fullname'];
            $lastname = $userinfo['EwtUser']['lastname'];
            $mailtempl = $userinfo['EwtUser']['mailtempl'];
            if ($mailtempl == 0) {
                $mailtempl = 1;
            }

            $setting = $this->EwtSetting->find('first');
            $mailhost = $setting['EwtSetting']['mailhost'];
            $mailuser = $setting['EwtSetting']['mailuser'];
            $mailpass = $setting['EwtSetting']['mailpass'];
            //$reportmail = $setting['EwtSetting']['reportmail'];
            $reportmail=$email;
            $bodymail = $this->EwtMailtemplate->read(null, $mailtempl);
            //$header = $bodymail['EwtMailtemplate']['header'];
            //$footer = $bodymail['EwtMailtemplate']['footer'];
            //$title = $bodymail['EwtMailtemplate']['title'];
            $subject="New login password for working time system";
            //$subject = $lastname . " " . str_replace("[date]", $date, $title);
            //$header = str_replace("[lastname]", $lastname, $header);
            //$header = str_replace("[date]", $date, $header);
            //$footer = str_replace("[lastname]", $lastname, $footer);

            //$content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'.$header ."<br />" . $reportcontent . "<br />" .  $footer . '</body></html>';

            $content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta http-equiv="Content-Type" content="text/html; charset =utf-8" /></head><body>'."<br />".$reportcontent."<br />".'</body></html>';

            $this->Email->to = $reportmail;
            $this->Email->charset = 'UTF-8';
            $this->Email->from = sprintf("%s <%s>", $fullname, $mailuser);
            $this->Email->replyto = sprintf("%s <%s>", $fullname, $mailuser);
            $this->Email->subject = $subject;
            $this->Email->sendAs ='html';
            $smtp = array(
                        'port'=>25,
                        'host'=>$mailhost,
                        'timeout'=>99,
                        'username'=>$mailuser,
                        'password'=>$mailpass
            );
            $this->Email->smtpOptions = $smtp;
            $this->Email->delivery = 'smtp';

            if ($this->Email->send($content)) {
                $this->redirect('newpassword');         
            } else {
                $this->redirect('userexists');
            }

            $smtp_error = $this->Email->smtpError;
            if (strlen($smtp_error)>0){
                $this->Session->setflash($smtp_errors);
            }
        }
    }

Nuevamente, ejecuta las ramas IF y ELSE Gracias por su preocupación y realmente me encantaría escuchar sus comentarios o consejos :-)

WOW, mi publicación es demasiado larga. ¡Pronto podré hacer un árbol filogenético! : -D-D

-4
PartialDue 9 mar. 2012 a las 09:46
¿Qué pasa con la función $this->sendmail? Y, por favor, intente consolidar sus preguntas, esta es la cuarta sobre básicamente el mismo tema.
 – 
deceze
9 mar. 2012 a las 10:04
Gracias, lo incluyo como arriba,
 – 
PartialDue
9 mar. 2012 a las 10:07
¿Se me otorgará un premio por hacer una publicación larga? La mía es ahora la publicación más larga en la historia de stackoverflow :-)
 – 
PartialDue
9 mar. 2012 a las 10:13
1
Seguro. Votar para cerrar no es una pregunta real.
 – 
Your Common Sense
9 mar. 2012 a las 10:14
Solo para ayudarlo con su solución: es claro que IF then Else nunca se ejecutarán ambos .
 – 
Your Common Sense
9 mar. 2012 a las 10:18

1 respuesta

La mejor respuesta

¡Está redirigiendo dentro de su función sendmail!

if ($this->Email->send($content)) {
    $this->redirect('newpassword');         
} else {
    $this->redirect('userexists');
}
3
deceze 9 mar. 2012 a las 10:14
Huhu huhu: llorando :::::: Gracias, no vi eso. : = (un millón de gracias por deceze, ¡mejor!
 – 
PartialDue
9 mar. 2012 a las 10:15
¿Hay algo más que pueda aconsejarme y que no haga en el recorte de fuente anterior?
 – 
PartialDue
9 mar. 2012 a las 10:17