Есть ли способ вызова немодальной формы на страницах с использованием cakephp3 - PullRequest
0 голосов
/ 30 апреля 2018

как то, что я читаю онлайн, оно будет доступно только для этого http://localhost/xxxxx/contact, тогда форма отобразит

но я хочу, чтобы он отображался на многих страницах, например, свяжитесь с нами или о нас

когда я вызываю эти страницы, я хочу, чтобы форма отображалась в содержании?

Шаблон

index.ctp

<?= $this->Form->create($contact); ?>
<?= $this->Form->input('name'); ?>
<?= $this->Form->input('email'); ?>
<?= $this->Form->input('body'); ?>
<?= $this->Form->button('Submit'); ?>
<?= $this->Form->end(); ?>

ContactController.php

<?php
// In a controller
namespace App\Controller;

use App\Controller\AppController;
use App\Form\ContactForm;

class ContactController extends AppController
{
public function index()
{
$contact = new ContactForm();
if ($this->request->is('post')) {
if ($contact->execute($this->request->data)) {
$this->Flash->success('Your message has been sent; we\'ll get back to you soon!');
$this->request->data['name'] = null;
$this->request->data['email'] = null;
$this->request->data['body'] = null;
} else {
$this->Flash->error('There was a problem submitting your form.');
}
}
$this->set('contact', $contact);
}
}

?>

ContactForm.php

<?php
namespace App\Form;

use Cake\Form\Form;
use Cake\Form\Schema;
use Cake\Validation\Validator;
use Cake\Mailer\Email;

class ContactForm extends Form
{

protected function _buildSchema(Schema $schema)
{
return $schema->addField('name', 'string')
->addField('email', ['type' => 'string'])
->addField('body', ['type' => 'text']);
}

protected function _buildValidator(Validator $validator)
{
return $validator->add('name', 'length', [
'rule' => ['minLength', 10],
'message' => 'Please enter your name'
])->add('email', 'format', [
'rule' => 'email',
'message' => 'Please enter a valid email address',
])->add('body', 'length', [
'rule' => ['minLength', 25],
'message' => 'Please enter your message text',
]);
}

protected function _execute(array $data)
{
// Send an email.
    return true;
}
}

1 Ответ

0 голосов
/ 30 апреля 2018

Вы можете исправить это, переместив форму шаблона контакта в элемент, чтобы она была доступна на любых страницах.

внутренний элемент в папке контактов, должна присутствовать форма ниже

<legend><?= __('Our Form') ?></legend>
    <fieldset>
        <?php
        echo $this->Form->input('name');
        echo $this->Form->input('email');
        echo $this->Form->input('body');
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end(); ?>

тогда на ваших страницах

Вы можете просто позвонить

<?php 
   echo $this->element('contact/index');
 ?> 

при условии, что вы создали index.ctp внутри папки контактов в элементе

Надеюсь, это решило вашу проблему.

...