
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:
- Criação de layouts CakePHP – Introdução ao CakePHP para Web Designers.
- Aplicando estilos CSS – CakePHP.
Criaremos a seguinte estrutura de diretórios:
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.
-21.764210
-43.349570