Email 元中的CakePHP 2.1联系形式';不发送
我的CakePHP应用程序中有两个联系人表单——一个有自己的控制器、模型和视图,另一个在元素中,可以作为“快速”联系人表单从站点上每个页面的页脚访问 两种形式的代码是相同的。元素用于访问其他表单使用的控制器和模型。但是,元素没有提交数据或发送电子邮件,而常规页面工作正常 以下是正常工作的常规表单的MVC代码:Email 元中的CakePHP 2.1联系形式';不发送,email,cakephp,contact-form,Email,Cakephp,Contact Form,我的CakePHP应用程序中有两个联系人表单——一个有自己的控制器、模型和视图,另一个在元素中,可以作为“快速”联系人表单从站点上每个页面的页脚访问 两种形式的代码是相同的。元素用于访问其他表单使用的控制器和模型。但是,元素没有提交数据或发送电子邮件,而常规页面工作正常 以下是正常工作的常规表单的MVC代码: <!-- Model: Model/Contact.php --> <?php class Contact extends AppModel { var $na
<!-- Model: Model/Contact.php -->
<?php
class Contact extends AppModel {
var $name = 'Contacts';
public $useTable = false; // Not using the database, of course.
var $validate = array(
'name' => array(
'rule' => '/.+/',
'allowEmpty' => false,
'required' => true,
),
'email' => array(
'allowEmpty' => false,
'required' => true,
)
);
function schema() {
return array (
'name' => array('type' => 'string', 'length' => 60, 'class' => 'contact input'),
'email' => array('type' => 'string', 'length' => 60, 'class' => 'contact input'),
'message' => array('type' => 'text', 'length' => 2000, 'class' => 'contact input'),
);
}
}
?>
<!-- Controller: Controller/ContactsController.php -->
class ContactsController extends AppController
{
var $name = 'Contacts';
/* var $uses = 'Contact'; */
var $helpers = array('Html', 'Form', 'Js');
var $components = array('Email', 'Session');
public function index() {
if(isset($this->data['Contact'])) {
$userEmail = $this->data['Contact']['email'];
$userMessage = $this->data['Contact']['message'];
$email = new CakeEmail();
$email->from(array($userEmail));
$email->to('email@example.com');
$email->subject('Website Contact Form Submission');
$email->send($userMessage);
if ($email->send($userMessage)) {
$this->Session->setFlash('Thank you for contacting us');
}
else {
$this->Session->setFlash('Mail Not Sent');
}
}
}
public function contact() {
if(isset($this->data['Contact'])) {
$userEmail = $this->data['Contact']['email'];
$userMessage = $this->data['Contact']['message'];
$email = new CakeEmail();
$email->from(array($userEmail));
$email->to('email@example.com');
$email->subject('Website Contact Form Submission');
$email->send($userMessage);
if ($email->send($userMessage)) {
$this->Session->setFlash('Thank you for contacting us');
// $this->redirect(array('controller' => 'pages', 'action' => 'index'));
}
else {
$this->Session->setFlash('Mail Not Sent');
}
}
}
}
?>
<!-- View: Views/Contacts/index.ctp -->
<?
$main = 'contact';
$title = 'quick contact';
?>
<div style="border-bottom: solid 1px #ccc;">
<h1 style="position:relative; float:left;"><?php echo $main; ?></h1>
<h2 style="position:relative;float:left;margin-top:15px; color: #869c38"> • <?php echo $title;?></h2>
<br><br>
</div>
<div class="clear"><br></div>
<div id="interior-page">
<?php
echo $this->Form->create('Contact');
echo $this->Form->input('name', array('default' => 'name (required)', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->input('email', array('default' => 'email (required)', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->input('message', array('default' => 'message', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->submit();
echo $this->Form->end();
?>
</div>
类ContactsController扩展了AppController
{
var$name='Contacts';
/*var$uses='Contact'*/
var$helpers=array('Html','Form','Js');
var$components=array('Email','Session');
公共职能指数(){
如果(设置($this->data['Contact'])){
$userEmail=$this->data['Contact']['email'];
$userMessage=$this->data['Contact']['message'];
$email=new-CakeEmail();
$email->from(数组($userEmail));
$email->to($email)email@example.com');
$email->subject('Website Contact Form Submission');
$email->send($userMessage);
如果($email->send($userMessage)){
$this->Session->setFlash(“感谢您联系我们”);
}
否则{
$this->Session->setFlash(“未发送邮件”);
}
}
}
公共职能联系人(){
如果(设置($this->data['Contact'])){
$userEmail=$this->data['Contact']['email'];
$userMessage=$this->data['Contact']['message'];
$email=new-CakeEmail();
$email->from(数组($userEmail));
$email->to($email)email@example.com');
$email->subject('Website Contact Form Submission');
$email->send($userMessage);
如果($email->send($userMessage)){
$this->Session->setFlash(“感谢您联系我们”);
//$this->redirect(数组('controller'=>'页面','action'=>'索引');
}
否则{
$this->Session->setFlash(“未发送邮件”);
}
}
}
}
?>
&公牛;
以下是不工作的快速联系表单的视图,位于默认布局页脚中显示的元素中:
<?php
echo $this->Form->create('Contact');
echo $this->Form->input('name', array('default' => 'name (required)', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->input('email', array('default' => 'email (required)', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->input('message', array('default' => 'message', 'onfocus' => 'clearDefault(this)'));
echo $this->Form->submit();
echo $this->Form->end();
?>
我尝试了不同的方式来更改表单操作,但我无法理解。通常,cake“自动”根据您调用表单的位置创建表单的操作,例如,如果从视图/Contacts/index.ctp调用,它会将操作设置为/Contacts/index。对于某个元素,Cake无法真正猜测您要做什么,因此您需要手动设置操作:
$this->Form->create('Contact', array('action' => 'index'));
或者设置完整的URL:
$this->Form->create('Contact', array('url' => '/contacts/index'));
通常,cake“自动”根据您调用表单的位置创建表单的操作,例如,如果从视图视图/Contacts/index.ctp调用,它会将操作设置为/Contacts/index。对于某个元素,Cake无法真正猜测您要做什么,因此您需要手动设置操作:
$this->Form->create('Contact', array('action' => 'index'));
或者设置完整的URL:
$this->Form->create('Contact', array('url' => '/contacts/index'));
确保在创建表单所需的每个页面上都包含联系人模型。在您的情况下,因为它在您的布局中,这可能意味着您应该将它放在AppController中,这样每个页面都可以访问它 您还需要指定表单应提交到的位置:
echo $this->Form->create('Contact', array(
'url' => array('controller'=>'contacts', 'action'=>'contact')
)
);
关闭注释-您可以合并最后两行:
echo $this->Form->end('Submit');
这将创建带有文本“submit”的submit按钮,并关闭表单。确保在创建表单所需的每个页面上都包含联系人模型。在您的情况下,因为它在您的布局中,这可能意味着您应该将它放在AppController中,这样每个页面都可以访问它 您还需要指定表单应提交到的位置:
echo $this->Form->create('Contact', array(
'url' => array('controller'=>'contacts', 'action'=>'contact')
)
);
关闭注释-您可以合并最后两行:
echo $this->Form->end('Submit');
这将创建带有文本“提交”的提交按钮,并关闭表单。谢谢!这对我帮助很大 很快,你发了两封电子邮件 一旦来到这里: $email->send($userMessage) 在这里: 如果($email->send($userMessage)) 第一个实例($email->send($userMessage))不是必需的
干杯谢谢!这对我帮助很大 很快,你发了两封电子邮件 一旦来到这里: $email->send($userMessage) 在这里: 如果($email->send($userMessage)) 第一个实例($email->send($userMessage))不是必需的
Cheers要为联系人模型创建表单,您需要确保已通过$uses或$loadModel在任何要使用它的页面上进行设置。。。在您的情况下,这可能是AppController,因为它位于每个页面上。(如果这能解决问题,我将写下这封信作为回答)另外-您需要指定表单应该提交到哪里。@Dave--谢谢您的建议。我尝试添加
App::uses('Contact','Model')代码>和App::使用('ContactModel','Model')
到AppController
,但似乎没有什么区别。放下$name的东西。你的代码就是一个很好的例子,为什么不使用它呢。您也可以只定义$_模式,无需为其创建自己的方法。有关详细信息,请参阅为了创建联系人模型的表单,您需要确保已通过$uses或$loadModel在任何要使用它的页面上进行设置。。。在您的情况下,这可能是AppController,因为它位于每个页面上。(如果这能解决问题,我将写下这封信作为回答)另外-您需要指定表单应该提交到哪里。@Dave--谢谢您的建议。我尝试添加App::uses('Contact','Model')代码>和App::使用('ContactModel','Model')代码>到AppController
,但它似乎不起作用