我是Laravel的新手并尝试通过联系表单发送电子邮件。
这是html表单:
<form onsubmit="return false" method="post" id="contact_form" name="contact-form">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" placeholder="Full Name" name="fullname" id="fullname" required>
<input placeholder="Email Address" required name="email" id="email">
<button id="contact_btn"data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Sending" >Send Your Message</button>
</form>
这是控制器:
public function contactPost(Request $request) {
$this->validate($request, [
'email'=>'required|email',
'fullname'=>'max:50',
]);
$data = array(
'email' => $request->email,
'fullname' => $request->fullname,
);
Mail::send('emails.contact', $data, function($message) use ($data){
$message->from($data['email']);
$message->to('**@gmail.com');
});
return ['success' => true,];
}
这是路线:
Route::post('contact', 'PagesController@contactPost');
这是我在laravel.logs上可以找到的最后一个错误:
[2017-08-11 06:30:53] local.ERROR: ErrorException: Use of undefined constant csrf_token - assumed 'csrf_token' in C:\xampp\htdocs\paygizer\storage\framework\views\b9aff2e30c0efeff3b03704fbc6a957f360869cf.php:385
无论我做什么,错误都没有自昨天以来更新,我重启服务器好几次。
这是ajax电话:
$('#contact_form').submit(function(e) {
e.preventDefault();
}).validate({
rules: {
fullname: {
required: true,
},
email: {
required: true,
email: true
},
},
submitHandler: function (form) {
var btn = $('#contact_btn');
btn.button('loading');
setTimeout(function() {
btn.button('reset');
}, 8000);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'POST',
url: "{{url('contact')}}",
// data: form.serialize(),
dataType: 'json',
async: true,
data: {
fullname: $('#fullname').val(),
email: $('#email').val(),
},
success: function (json) {
$('#contact').hide();
$('#output').html(
'<i class="fa fa-check" aria-hidden="true" id="check" style="border-radius:50%;font-size:80px;text-align:center;color:#E81B00"></i><br><p class="lead" style="font-size:40px;">We have received your message!</p>'
).show();
},
error: function(data){
alert(data);
},
});
return false; // for demo
}
});
Chrome开发者工具没有错误。当我点击提交时,按钮加载并没有任何反应。
答案 0 :(得分:1)
1)尝试更换
<input type="hidden" name="_token" value="{{ csrf_token() }}">
带
{{ csrf_field() }}
2)因为它是一个ajax调用你确定csrf-token meta存在吗?
<meta name="csrf-token" content="{{ csrf_token() }}">