Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anderson Narciso

[Resolvido] Envio de formulário com CakePHP

Recommended Posts

Olá pessoal. Vou diretamente ao assunto... Possuo um site feito com cakePHP (não foi eu quem fiz, mas digamos que fui deixado na mão). O site possui uma página de contato com um formulário, no qual ele puxa da o valor dos campos informados em um formulário na home page, até ai tudo bem funciona tranquilamente, porem ele não envia os dados para o e-mail.. Não envia dados nenhum, o formulário simplesmente não chega para o e-mail que recebe. Pior é que não sei nada de cakePHP, não sei se utiliza painel, nada.. Poderiam me ajudar?

 

controllers/contacts_controller.php

// app/controllers/contacts_controller.php
<?php
class ContactsController extends AppController {

   var $name = 'br/Contacts';
   var $uses = '';
   var $components = array('Email');

   function index()
   {
       if(isset($this->data))
       {
           $name = $this->data['Contact']['primeiroNome'] . '' . $this->data['Contact']['sobreNome'];
           $from = $this->data['Contact']['email'];
           $subject = 'Contato do Site';
           $msg = $this->data['Contact']['msg'];

           $this->Email->sendAs = 'both'; // html, text, both
           $this->set('conteudo', $msg); // especifica variavel da mensagem para o template
           $this->Email->layout = 'Contact"; // views/elements/email/html/default.ctp
           $this->Email->template = 'Contact";

           // set view variables as normal
           $this->set('from', $name);
           $this->set('msg', $msg);

              $this->Email->to = ' email@provedor.com.br Este e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ';
              $this->Email->subject = $subject;
              $this->Email->replyTo = '  email@provedor.com.br Este e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ';
              $this->Email->from = $name . '<' . $from .'>';

              if ( $this->Email->send($msg) ) {
                  $this->Session->setFlash('E-mail enviado');
              } else {
                  $this->Session->setFlash('E-mail nao enviado');
              }
              $this->redirect('/');
       }
   }

}
?>

 

views/br/contato.ctp

 

<p>
   <?php
   echo 'De: '.$contato['nome'];
   echo 'Email: '.$contato['email'].'<br/>';
   echo 'Tel.: '.$contato['telefone'].'<br/>';
   ?>
</p>
<p>
   <?php
   echo 'Mensagem: '.$contato['mensagem'].'<br/>'; // Essas informações são puxadas da home page
   echo 'Entrada: '.$contato['dataentrada'];
   echo ' Saída: '.$contato['datasaida'].'<br/>';
   echo 'Hóspedes: '.$contato['numadultos'].' adultos, e '.$contato['numcriancas'].' crianças.';
   ?>
</p>

controllers/br_controller.php

 

<?php
class BrController extends AppController {

var $name = 'Br';

       var $uses = array();

       var $helpers = array('Html', 'Javascript');

       var $components = array('Email');



       function index(){
           $this->layout = 'default_br';
           $this->set('title_for_layout', 'Bem-vindo');
           //$this->redirect('/');
       }

       function contatos(){
           $this->layout = 'clean_br';
           $this->set('title_for_layout', 'Contatos');

           if($this->data & $this->data['etapa'] != 1){
               $contato = $this->data;
               //print_r($contato);

               $this->set('contato', $contato);

               $this->Email->to = 'email@provedor.com.br';
               $this->Email->cc = 'email@provedor.com.br';
               $this->Email->subject = 'Contato';
               $this->Email->from = 'email@provedor.com.br';
               $this->Email->template = 'contato';
               $this->Email->sendAs = 'html';

               if($this->Email->send()){
                   $this->set('mensagem', '<div class="sucesso"><h2>Obrigado pelo seu contato, '.$contato['nome']
                           .'<br/>Em breve responderemos a sua mensagem.</h2></div>');
               }else{
                   $this->set('<div class="erro"><h2>mensagem', 'Desculpe, '.$contato['nome'].', houve uma pequena falha
                       em nosso sistema que impediu o envio de sua mensagem. Pedimos que tente novamente dentro
                       de alguns minutos.</h2></div>');
               }


           }
       }
?>

 

controller/contatos_controller

<?php
class ContatosController extends AppController {

var $name = 'Contatos';

       var $uses = array();

       var $helpers = array('Javascript');

       function index(){
           $this->layout = 'clean';

       }
}
?>

 

modulos/contato.php

 

<?php
class contatos extends AppModel
{
   var $name = 'contatos';
   var $useTable = true;
}
?>

 

Eu acho, não tenho certeza, que esses são os arquivos, qualquer coisa vocês que tem o conhecimento, me informem que eu procuro.

 

Grato desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa senhora, ta biito o codigo em! rsrs

 

Vamos lá,

o Cakephp trabalha em MVC, então acho que eu to vendo muitos Controllers para apenas uma pagina.

Vamos ficar com o controller ContactsController

 

Model Contact / contact.php

class Contact extends AppModel{

/*
* @public
*/
var $name = "Contact";

/*
* Este model utiliza uma tabela no banco?
* @string com nome da tabela ou false para nao usar tabela
* @public
*/
var $useTable = false; #não utilizaremos tabela pois os dados seram enviados por e-mail

/*
* Se preferir tambem pode colocar a validação dos campos do form
* http://book.cakephp.org/view/1143/Data-Validation
*/

}

 

 

 

 

ContactsController / contacts_controller.php

/*
* Classe responsavel pela pagina de contato do site
*/
class ContactsController extends AppController{

/*
* @public
*/
var $name = "Contacts";

/*
* Os modelos que serão usados pelo controller
* @mixed
* @public
*/
var $uses = array('Contact');

/*
* Componentes que seram usados pelo controller
* E-mail: responsavel por enviar e-mails
* @mixed
* @public
*/
var $components  = array('E-mail');


/*
* Function Index
* Metodo que será chamado caso a url /contacts seja chamada
* Exibe form de contato ou envia envia e-mail com dados do contato 
* @public
*/
function index(){

   #verifica se $this->data contem os dados de contato
   if(!empty($this->data)){

    #Configuração para envio de e-mail
      $this->Email->subject  = 'New contact' ; #Assunto do e-mail
      $this->Email->to =  ''; # email do destinatário mensagem
      $this->Email->from = ''; # email do remetente
      $this->Email->template = 'contact'; #ou o template de sua escolha
      $this->Email->sendAs = 'both'; #metodo de envio (text = somente texto) | (html = contendo html) | (both = os dois)

     /* Caso queira enviar via SMTP retire o comentario e configure
     $this->Email->smtpOptions = array(        
                                       'port'=>'25',
                                       'timeout'=>'30',        
                                       'host' => 'your.smtp.server',        
                                       'username'=>'your_smtp_username',        
                                       'password'=>'your_smtp_password',
                                       'client' => 'smtp_helo_hostname'   );    
      $this->Email->delivery = 'smtp' # seta o modo de envio para SMTP caso queira
     */

    #Seta os dados do formulario para o template
    $this->set('contact',$this->data);

    #Valida envio do e-mail
    if($this->Email->send()):

      $this->Session->setFlash('Contato realizado com sucesso');

    else:

      $this->Session->setFlash('Falha ao tentar realizar contato, tente novamente!');

    endif;

   }

}

}

 

Agora é necessario criar o layout para o e-mail, a estrutura de pastas e arquivo é essa apatir da pasta Layout

email/
	html/
		default.ctp
	text/
		default.ctp

 

No arquivo text/default.ctp coloque o conteudo

<?php echo $content_for_layout; ?>

 

No arquivo

html/default.ctp

coloque o conteudo

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
	<?php echo $content_for_layout; ?>
</body>
</html>

 

Agora criaremos o template da mensagem o que recebera os dados do formulário

- Na pasta /views/elements/email/text e /html crie um arquivo contact.ctp com o conteudo

 

<?php
print_r($contact);
?>

 

Pronto acho agora, teste e veja oq está indo, se pelo menos a view que o kra criou estiver correta acho que ira funcionar e ira enviar um Dump com os dados de contato, apatir da ai é só formatar o template e o layout como queira.

 

Qualquer erro de digitação me avisem, nao sou acostumado a escrever codigo para posts!

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hahaha complicado brother, ainda mais que não manjo nada de cake e não foi eu quem fez o form. Mas olha só como conseguir resolver, foi mais pela noção de PHP mesmo do que por saber de cake que por sinal é uma vergonha para mim,

 

// Arquivo br_controller.php
$headers = "MIME-Version: 1.1\n";
               $headers .= "Content-type: text/html; charset=iso-8859-1\n";
               $headers .= "From: Web Site <email@provedor.com.br>\n";
               $headers .= "Reply-To: email@provedor.com.br\n";
               $headers .= "Return-Path: email@provedor.com.br\n"; // return-path

               $destinatario = 'email@provedor.com.br';
               $assunto = 'Web Site - Contato';
               $body = '<html><body>';
               $body .= '<h2>Um visitante entrou em contato:</h2>';
               $body.='<p>Nome: '.$contato['nome'];
               $body.='<br>Email: '.$contato['email'];
               $body.='<br>Telefone: '.$contato['telefone'];
               $body.='<br>Mensagem: '.$contato['mensagem'];
               $body.='</p><h3>Informações extras</h3><p>';
               $body.='<br>Data Entrada: '.$contato['dataentrada'];
               $body.='<br>Data Saída: '.$contato['datasaida'];
               $body.='<br>Adultos: '.$contato['numadultos'];
               $body.='<br>Crianças: '.$contato['numcriancas'].'</p>';
               $body.='</body></html>';

 

Tava faltando os headers para funcionar no servidor que o site está :/ sueu, mas consegui hehehe.

Obrigado pela disposição na ajuda amigo.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.