您可以将表单的HTML代码添加到组件partials目录、主题的partials目录或直接添加到任何页面/布局中。这并不重要。
了解更多关于包含
Partials的信息。
{% partial "contact-form.htm" %}
或者
{% partial __SELF__ ~ "::contact-form.htm" %} // reference to component's partial
十月的AJAX框架需要使用JavaScript API或数据属性。你在示例中的做法很好,但忘记在onSend处理程序之前添加组件名称了。
data-request="SendEmails::onSend"
"Where
SendEmails
= 在页面中给定的组件名称或别名,如果表单在组件的部分中,则只需使用
{{ __SELF__ }}::onSend
或者使用JavaScript API, 可以这样做:
"
$.request('onSend', {
data:{email:email, message:message, name:name},
success: function (data) {
},
error:function(e){
}
});
然后在处理请求的组件中创建一个名为
onSend
的函数:
<?php namespace AuthorName\PluginName\Components;
use Cms\Classes\ComponentBase;
use Mail;
use Url;
use Input;
use Request;
use Response;
use ApplicationException;
use Validator;
use ValidationException;
class SendEmails extends ComponentBase
{
public function onSend()
{
if (Request::ajax()) {
try {
$data = post();
if (!array_key_exists('email', $data)) {
$data['email'] = post('email');
}
if (!array_key_exists('norad', $data)) {
$data['message'] = post('message');
}
if (!array_key_exists('name', $data)) {
$data['name'] = post('name');
}
$rules = [
'email' => 'required|email|between:6,255',
'name' => 'required|between:4,255'
];
$validation = Validator::make($data, $rules);
if ($validation->fails()) {
throw new ValidationException($validation);
}
if (View::exists("author.plugin::mail.templatename")) {
Mail::send("author.plugin::mail.templatename", $data, function ($message) {
$message->from('noreply@yourdomain.com', 'Site Name');
$message->to($data['email'], $data['name']);
$message->subject('Subject here..');
});
if (count(Mail::failures()) > 0) {
echo "Failed to send Mail ";
} else {
echo "Mail Sent!";
}
}
} catch (Exception $ex) {
throw $ex;
}
}
}
}