1) Немного переделал форму, так как если поля не заполнить и закрыть ее все равно появлялось уведомление что письмо отправлено. Поправил это. Новый код:
<script type="text/javascript">
window.onload = function () {
var a = document.getElementById('director');
a.onclick = function() {
Swal({
type: 'warning',
title: 'Письмо директору',
html:
'<input name="name" id="swal-input1" class="swal2-input" placeholder="Ваше имя">' +
'<input name="email" id="swal-input2" class="swal2-input" placeholder="Email для ответа">' +
'<textarea name="text" id="swal-textarea1" class="swal2-textarea" placeholder="Введите текст сообщения..." style="display: flex;"></textarea>',
showCancelButton: true,
confirmButtonColor: '#ff5908',
cancelButtonColor: '#666',
confirmButtonText: 'Далее',
cancelButtonText: 'Отмена',
preConfirm: function () {
return new Promise(function (resolve) {
resolve([
$('#swal-input1').val(),
$('#swal-input2').val(),
$('#swal-textarea1').val()
])
})
},
}).then(function (result) {
if (result.value) {
var result = {};
result.name = $('#swal-input1').val();
result.email = $('#swal-input2').val();
result.text = $('#swal-textarea1').val();
$.ajax({
url:"index.php?route=common/director/index",
type: "POST",
data: JSON.stringify(result),
success: function() {Swal({type: 'success', text: 'Сообщение отправлено'});},
error: function(xhr,status,error){
console.log(status);
console.log(error);
}
})
}
})
return false;
}
}
</script>
2) Вопрос к знатокам, с точки зрения более чистого кода уместно ли было создать новый контроллер для обработки такого запроса. Или же логичнее было впихнуть функцию обработки например в контроллер хедера/футера?
Может быть вообще правильнее было всю логику вставить в функцию индекс хэдера/футера?
3)
Защиту от спама не делал, во-первых не знаю как, а во-вторых на моем проекте она не нужна, спама нет)
А вот с file_get_contents , тут да. Я долго не мог поймать пост запрос и в итоге это единственное решение которое сработало.
Был бы признателен если бы указали как правильнее его поймать.
Я так понимаю что надо начать со строк:
if ($this->request->server['REQUEST_METHOD'] == 'POST') {
}
но как тут правильно все сделать не понимаю, у меня ничего не получилось