Я недавно начал использовать CakePHP, и теперь я пытаюсь создать контактную форму для моего сайта.
Кажется, это работает при проверке форм, но я хочу кое-что сделать сейчас.
Я хочу, чтобы он отображал любые ошибки, которые возникают (например, отсутствует обязательное поле)
Тем не менее, я хочу, чтобы он показал 2 разных возможных состояния:
- Ошибка пользователя (пользователь забыл поле или поле не соответствует требованиям), покажите это под полем (используя Bootstrap 4)
- Ошибка сервера (почта не может быть отправлена с сервера - например, SMTP-сервер не работает), отображается с помощью Flash
Я искал повсюду это, но я не мог продвинуться дальше, не задав сам вопрос.
Ниже приведен весь код, который я использую (работает CakePHP 3.6)
src / Template / Pages / contact.ctp (управляется PagesController
):
<div class="container">
<div class="row no-banner">
<div class="col-md-6">
<h4>Contact Form</h4>
<div style="padding-bottom:25px;">
Got a question? we'd love to hear it from you!<br />
Send us a message and we'll respond as soon as possible!
</div>
<?= $this->Flash->render(); ?>
<?= $this->Form->create("Contact",array("url"=>"/contact","class"=>"contact-form","id"=>"contact-form")); ?>
<?= $this->Form->control("name",array("placeholder"=>"Your Name","label"=>false,"class"=>"form-control")); ?>
<?= $this->Form->control("email",array("placeholder"=>"Your Email","label"=>false,"class"=>"form-control")); ?>
<?= $this->Form->control("subject",array("placeholder"=>"The Subject","label"=>false,"class"=>"form-control")); ?>
<?= $this->Form->textarea("message",array("placeholder"=>"Your Message","label"=>false,"class"=>"form-control")); ?>
<?= $this->Form->button('Submit',array("class"=>"btn")); ?>
<?= $this->Form->end(); ?>
</div>
<div class="col-md-6">
<h4>Social Media</h4>
<div style="padding-bottom:25px;">
We are active on a variety of of social media, feel free to like and follow us!
</div>
<a href="#"><i class="fab fa-facebook social-media-icon"></i></a>
<a href="#"><i class="fab fa-discord social-media-icon"></i></a>
<?= $this->Form->errors; ?>
</div>
</div>
</div>
SRC / контроллер / ContactController.php:
<?php
namespace App\Controller;
use App\Controller\AppController;
use App\Form\ContactForm;
class ContactController extends AppController {
public function add() {
$contact = new ContactForm();
if ($this->request->is('post')) {
if ($contact->execute($this->request->getData())) {
$this->Flash->success('We will get back to you asap!');
$this->redirect($this->referer());
} else {
$this->Flash->error('There was an issue sending your mail. Please try again later!');
$this->redirect($this->referer());
}
}
$this->set('contact', $contact);
}
}
ЦСИ / Форма / ContactForm.php:
<?php
namespace App\Controller;
use App\Controller\AppController;
use App\Form\ContactForm;
class ContactController extends AppController {
public function add() {
$contact = new ContactForm();
if ($this->request->is('post')) {
if ($contact->execute($this->request->getData())) {
$this->Flash->success('We will get back to you asap!');
$this->redirect(array('controller' => 'Pages','action' => 'display','contact'));
} else {
$this->Flash->error('There was an issue sending your mail. Please try again later!');
$this->redirect($this->referer());
}
}
$this->set('contact', $contact);
}
}