代码之家  ›  专栏  ›  技术社区  ›  Jervyn Paller

有没有一种方法可以使用cakephp3在页面中调用无模式表单

  •  1
  • Jervyn Paller  · 技术社区  · 6 年前

    正如我在网上读到的那样,它只适用于这样的用户 http://localhost/xxxxx/contact 然后将显示表单

    但我希望它能显示在许多页面中,如“联系我们”或“关于我们”页面

    当我调用此页面时,我希望表单出现在内容中?

    样板

    指数ctp公司

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

    联系控制器。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);
    }
    }
    
    ?>
    

    联系人表单。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 回复  |  直到 6 年前
        1
  •  2
  •   distromob    6 年前

    您可以通过将联系人模板表单移动到元素中来修复它,以便它可以在任何页面中使用。

    在联系人文件夹中的元素内,必须提供以下表单

    <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');
     ?> 
    

    假设您创建了索引。元素中联系人文件夹内的ctp

    希望它解决了你的问题。