CakePHP, PHP

Formulário de envio de e-Mail com validação – CakePHP

CakePHP
Image via Wikipedia

Criação de um simples formulário de e-mail, utilizando o sistema de validação do Cakephp.

Utilizaremos como base, a aplicação desenvolvida nos posts:

  1.  Criação de layouts CakePHP – Introdução ao CakePHP para Web Designers.
  2. Aplicando estilos CSS – CakePHP.

Criaremos a seguinte estrutura de diretórios:

  • /app/views/contacts

Crie no diretório /app/controllers, um arquivo com extensão .php e atribua o nome contacts_controller e insira no mesmo o seguinte conteúdo:

<?php
class ContactsController extends Controller {
    var $components = array('Email');
    function send() {
        if(!empty($this->data)) {
            $this->Contact->set($this->data);
            if($this->Contact->validates()) {
                if(!empty($this->data['Contact']['company'])) {
                    $this->Email->from = $this->data['Contact']['company'] . ' - ' . $this->data['Contact']['name'] . ' <' . $this->data['Contact']['email'] . '>';
                } else {
                    $this->Email->from = $this->data['Contact']['name'] . ' <' . $this->data['Contact']['email'] . '>';
                }
                $this->Email->to = 'emaildestinatário@dominio.com.br';
                $this->Email->subject = 'texto cabeçalho e-Mail';
                $this->Email->send($this->data['Contact']['message']);
                $this->render('success');
            } else {
                $this->render('index');
            }
        }
    }
    function index() {
    }
}

No controller, setaremos a utilização do componente email e definir os parâmetros de envio.

No diretório /app/models, crie um arquivo com extensão .php e de ao mesmo o nome de contact e insira o seguinte conteúdo:

<?php
class Contact extends AppModel {
    var $name = 'Contact';
    var $validate = array(
        'name' => array(
            'rule' => 'notEmpty',
            'message' => 'O campo Nome é obrigatorio.'
        ),
        'email' => array(
            'rule' => 'email',
            'message' => 'O campo e-Mail é obrigatório.'
        ),
        'message' => array(
            'rule' => 'notEmpty',
            'message' => 'O campo Motivo do contato é obrigatório.'
        )
    );
}
?>

O model, vai determinar quais campos serão validados.

No diretório /app/views/contacts, serão criados dois arquivos com extensão .ctp, abaixo, o conteúdo a ser inserido nos respectivos arquivos:

index.ctp – O formulário apresentado para o utilizador – “$content_for_layout”

<p>Utilize o formulário abaixo para entrar em contato.</p>
<?php echo $this->Form->create('Contact', array('action' => 'send')); ?>
<table style="border:none;">
    <tr>
        <td>Nome</td>
        <td><?php echo $this->Form->input('Contact.name', array('label' => false, 'maxlength' => 100, 'size' => 40)); ?></td>
    </tr>
    <tr>
        <td>Empresa</td>
        <td><?php echo $this->Form->input('Contact.company', array('label' => false, 'maxlength' => 100, 'size' => 40)); ?></td>
    </tr>
    <tr>
        <td>e-Mail</td>
        <td><?php echo $this->Form->input('Contact.email', array('label' => false, 'maxlength' => 100, 'size' => 40)); ?></td>
    </tr>
    <tr>
        <td style="vertical-align: top;">Motivo do contato</td>
        <td><?php echo $this->Form->input('Contact.message', array('label' => false, 'cols' => 50, 'rows' => 10)); ?></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><br><?php echo $this->Form->end('Enviar e-Mail'); ?></td>
    </tr>
</table>

success.ctp – Mensagem de retorno após envio dos dados.

<?php
echo $this->Session->flash();
?>
<p>Obrigado, Em breve estarei retornando seu contato.</p>

No arquivo default.ctp, encontrado no diretório /app/views/layouts, altere a linha:

<?php echo $html->link('Contato', array('controller' => 'pages', 'action' => 'contato')); ?>

Para:

<?php echo $html->link('Contato', array('controller' => 'contacts', 'action' => 'index')); ?>

Delete o arquivo contato.ctp, presente no diretório: /app/views/pages.

Para saber mais sobre componente Email:

http://book.cakephp.org/pt/view/1283/Email

Para saber mais sobre Validação de dados:

http://book.cakephp.org/pt/view/1143/Valida%C3%A7%C3%A3o-de-dados

Para saber mais sobre FormHelper:

http://book.cakephp.org/pt/view/182/Form

Boa sorte.

Anúncios

4 comentários sobre “Formulário de envio de e-Mail com validação – CakePHP

  1. Cara, lindo post sobre o CakePHP. Gostei muito!

    Mas uma pergunta… existe algum editor que faça o autocomplete enquanto eu digito o código, para facilitar na hora de digitar as classes/funções?

  2. Mt Bacana o post, mas no model dá erro devida a ausência de uma tabela para o modelo então deve ser acrescido o “useTable”, ficando assim:

    array(
    ‘rule’ => ‘notEmpty’,
    ‘message’ => ‘O campo Nome é obrigatorio.’
    ),
    ‘email’ => array(
    ‘rule’ => ‘email’,
    ‘message’ => ‘O campo e-Mail é obrigatório.’
    ),
    ‘message’ => array(
    ‘rule’ => ‘notEmpty’,
    ‘message’ => ‘O campo Motivo do contato é obrigatório.’
    )
    );
    }

    Abs e Vlw!

    1. putz… Cortou o código todo…

      class Contact extends AppModel {

      var $name = ‘Contact’;
      public $useTable = false; // This model does not use a database table
      var $validate = array(
      ‘name’ => array(
      ‘rule’ => ‘notEmpty’,
      ‘message’ => ‘O campo Nome é obrigatorio.’
      ),
      ‘email’ => array(
      ‘rule’ => ‘email’,
      ‘message’ => ‘O campo e-Mail é obrigatório.’
      ),
      ‘message’ => array(
      ‘rule’ => ‘notEmpty’,
      ‘message’ => ‘O campo Motivo do contato é obrigatório.’
      )
      );
      }

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s