我为此创建了一个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');
最后,表单的“提交”按钮甚至不是绿色,而是灰色,单击时不起作用。此外,星号(*)不会显示需要字段的表单标签...
你能帮我解决这个问题吗?
答案 0 :(得分:0)
你有点绕过Cake的'Convention over configuration'范例。 为了使这些约定有效,Cake使用处理复数形式的英语单词的Inflector Class。
因此,当您使用适当的(对此约定)命名策略时,它将“开箱即用”。否则,您必须配置您正在使用的Model,Controller和任何Helpers / Components /行为。它们都有配置参数,但是使用Cake进行静态配置并不是很重要,因为如果重命名DB表,你也必须再次进行配置。 我只是反对蛋糕的想法。如果您需要这样做,只需使用其他一些基于配置的框架。
答案 1 :(得分:0)
我认为问题出在你看来。您还必须回显表单的开头:
echo $this->Form->create('Mlist');
命名约定没问题。 Cake没有真正英语单词的数据库,只有少数不规则(参见http://api.cakephp.org/2.3/source-class-Inflector.html中的数组)所以像Mlist这样的东西只是复数,最后加上“s”。