【问题标题】:Class ContactForm not found in Modelless Form in CakePHP在 CakePHP 的无模型表单中找不到类 ContactForm
【发布时间】:2018-02-03 00:19:35
【问题描述】:

我在我的应用程序中使用无模型表单,我遵循 CakePHP 无模型 guid,但我遇到了错误。 我尝试了不同的方法来解决问题,但没有成功,请帮助我。

找不到类“ContactForm”。

在 Controller\ContactController.php 中显示错误,第 20 行

src/Form/ContactForm.php

<?php

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


class ContactForm extends Form{

    /**
     * _buildSchema is used to define which fields going to use HTML Form
     * created  by FormHelper
     * @param Schema $schema
     * @return $this|Schema
     */
    protected function _buildSchema(Schema $schema)
    {
        return $schema->addField('name','string')
            ->addField('email',['type'=>'string'])
            ->addField('body',['type'=>'text']);
    }

    /**
     *_buildValidator is used to validate rules for our fields
     * to show error to user
     * @param Validator $validator
     * @return $this|Validator
     */
    protected function _buildValidator(Validator $validator)
    {
        return $validator->add('name','length',[
            'rule' => ['minLength', 3],
            'message' => 'Please enter your name'
        ])->add('email','lenght',[
            'rule' => ['minLength',10],
            'message' => 'Please enter your Email id'
        ]);
    }

    /**_email() will send email to us and
     * $email is a boject of email class and we are tell it to use default
     * that we setup in app.php
     * @param array $data
     * @return bool|void
     */
    protected function _execute(array $data)
    {
        $email = new Email();
        $email->setProfile('default');

        $email->setFrom([$data['email']])
            ->setTo('creative.rihan@gmail.com')
            ->setSubject('Sended from Contact us Form')
            ->send([$data['body']]);

        return true;


    }
}

src/Controller/ContactController.php

<?php
namespace App\Controller;


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

/**
 * Class ContactController should be the same name as form name
 */

class ContactController extends AppController
{
    /**
     *
     */
    public function index()
    {
        $contact = new ContactForm();  // This is line no 20

        if($this->request->is('post'))
        {
            if($contact->execute($this->request->getData()))    //here execute() will _execute() in ContactForm
            {
                $this->Flash->success('Thank for Contacting us.');

                $this->request->getData('name');
                $this->request->getData('email');
                $this->request->getData('body');
            } else{
                $this->Flash->error('Sorry your message could not be send');
            }

        }
        $this->set('contact',$contact);
    }
}

src/Template/Contact/index.ctp

<?php

?>


<div class="contact form large-12 medium-12 columns content">
    echo $this->Form->create($contact);

    <legend><?= __('Contact Us') ?></legend>
    <fieldset>
        <?php
        echo $this->Form->control('name');
        echo $this->Form->contorl('email');
        echo $this->Form->control('body');
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end(); ?>
</div>

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    您忘记为表单提供命名空间。
    你的文件src/Form/ContactForm.php 应该这样开始:

    <?php
    namespace App\Form;
    
    use Cake\Form\Form;
    use Cake\Form\Schema;
    use Cake\Mailer\Email;
    use Cake\Validation\Validator;
    
    
    class ContactForm extends Form {
    

    【讨论】:

    • 我也想试试这个,以便在我的网站上有一个联系表,我复制了所有文件然后我出现了这个错误?错误:找不到类 'App\Form\Email' 文件 c:\xampp-for-cakephp3\htdocs\blog\src\Form\ContactForm.php 行:29
    • 我的错误应该怎么办?错误:找不到类“App\Form\Email”,,
    • 谢谢先生,它对我有用,但现在我遇到错误,无法建立连接,因为目标机器主动拒绝它
    • @JavedSaifi 这只是意味着处理您邮件的机器不想帮助您(例如端口关闭)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多