在我的CakePHP应用程序中,我有一个我自己创建的电子邮件表单,在单击电子邮件超链接时会打开。然后我如何从表单传递数据,以便可以使用CakeEmail发送?对不起,我已经尝试了很长时间并检查了http://book.cakephp.org/2.0/en/core-utility-libraries/email.html上的所有文档,仍然无法弄明白。
这是我的代码......
email.ctp
<?php $this->Html->addCrumb('New Email', '#'); ?>
<div id="email_page" class="span12">
<div class="row">
<?php
echo $this->Form->create('Email', array('controller'=>'person', 'action'=>'email_send'));
echo $this->Form->input('email', array('class'=>'email_form','label'=>'To: ','value'=>$email['Person']['primEmail']));
echo $this->Form->input('subject', array('class'=>'email_form','label'=>'Subject: '));
echo $this->Form->input('message', array('class'=>'email_form email_body', 'type'=>'textarea','label'=>'Message: '));
echo $this->Form->end('Send', array('class'=>'pull-right'));
?>
</div>
</div>
email_send.php
<?php
$email = new CakeEmail('default');
$email->to('email');
$email->subject('subject');
$email->send('message');
?>
感谢任何帮助!
答案 0 :(得分:2)
表单数据将在控制器中以$this->request->data
(可写)或$this->data
(可读)形式提供。由于您的表单被称为电子邮件,因此在提交表单后,所有数据都将在$this->request->data['Email']
下提供。
我不确定为什么你会在email_send.php
中使用电子邮件代码而不是使用Controller方法。表单需要在PersonsController中存在email_send
方法,因为表单操作设置为/persons/email_send
。因此,我会将电子邮件代码放在email_send()
中的PersonsController.php
内。
所以:
<?php
public function email_send() {
$email = new CakeEmail('default');
$email->to($this->request->data['Email']['email']);
$email->subject($this->request->data['Email']['subject']);
$email->send($this->request->data['Email']['message']);
}
?>
当然,当所有这些工作正常时,您应该设置正确的validation并检查$this->request->data
是否填充了相关数据。
答案 1 :(得分:2)
更优化的代码将在
中public function email()
{
//add this
if ($this->request->is('post')) {
$post_array = $this->request->data;
$email = new CakeEmail();
$email->viewVars(array('message' => $post_array['Email']['message'] ))
->template('contactForm')
->emailFormat('html')
->config(array('from' => 'test@test.com' ,'to' => $post_array['Email']['email']))
->subject ($post_array['Email']['subject'])
->send();
}
}
通常,您可以在
下定义名称为contact_form.ctp的电子邮件模板/app/View/Emails/html/
并将数据传递给模板并根据您的要求格式化html。 谢谢!