0

我为此创建了一个控制器、一个模型和一个视图。我想在 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');

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

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

4

2 回答 2

0

您有点绕过 Cake 的“约定优于配置”范式。为了让这些约定起作用,Cake 使用了处理英语单词复数形式的Inflector 类

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

于 2013-05-13T09:28:28.970 回答
0

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

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

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

于 2013-08-28T06:10:45.260 回答