CakePHP表单不起作用

时间:2013-05-12 16:42:49

标签: php forms cakephp

我为此创建了一个Controller,一个模型和一个视图。我想在CakePHP中创建一个表单。但这不起作用,直到现在我无法理解为什么会发生这种情况......

我的控制器代码是:

class MlistsController extends AppController {

    public $helpers = array('Html','Form');

    public function create() {
        if ($this->request->is('post')) {
            if ($this->Mlist->save($this->request->data)) {
                $this->Session->setFlash(__('okay..'));
                $this->redirect('action' => 'index');
            }
        }
    }    
}

我的模特是:

App::uses('AuthComponent', 'Controller/Component');

class MList extends AppModel {

    public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }

    public $validate = array(
        'listname' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A listname '
            )
        ),
        'replyto' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'email' => 'email'
            )
        ),
        'fromName' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'Your name'
            )
        ),
        'subject' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A subject '
            )
        ),
        'reminder' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'A reminder '
            )
        ),
        'contactsfile' => array(
            'required' => array(
                'rule' => array('notEmpty'),
                'message' => 'custom message'
            )
        ));

}

我的视图文件create.ctp是:

<h2>Create new list</h2>

<?php
    $this->Form->create('Mlist');
    echo $this->Form->input('listname',array('label' => 'Your ListName:'));;
    echo $this->Form->input('replyto',array('label' => 'Reply To email:'));
    echo $this->Form->input('fromName',array('label' => 'From Name:'));
    echo $this->Form->input('subject',array('label' => 'mail subject:'));
    echo $this->Form->input('reminder',array('label' => 'Reminder'));
    echo $this->Form->input('contactsfile',array('label' => 'Upload your file','type' => 'file'));
    echo '<br />';
    echo $this->Form->end('submit');

最后,表单的“提交”按钮甚至不是绿色,而是灰色,单击时不起作用。此外,星号(*)不会显示需要字段的表单标签...

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

你有点绕过Cake的'Convention over configuration'范例。 为了使这些约定有效,Cake使用处理复数形式的英语单词Inflector Class

因此,当您使用适当的(对此约定)命名策略时,它将“开箱即用”。否则,您必须配置您正在使用的ModelController和任何Helpers / Components /行为。它们都有配置参数,但是使用Cake进行静态配置并不是很重要,因为如果重命名DB表,你也必须再次进行配置。 我只是反对蛋糕的想法。如果您需要这样做,只需使用其他一些基于配置的框架。

答案 1 :(得分:0)

我认为问题出在你看来。您还必须回显表单的开头:

    echo $this->Form->create('Mlist');

命名约定没问题。 Cake没有真正英语单词的数据库,只有少数不规则(参见http://api.cakephp.org/2.3/source-class-Inflector.html中的数组)所以像Mlist这样的东西只是复数,最后加上“s”。