我的控制器:
class PostsController extends AppController
{
function index() {
$this->set('posts', $this->Post->find('all'));
}
function add(){
if(!empty($this->data))
{
$this->Post->save($this->data);
$this->Session->setFlash('the post was saved successfully');
$this->redirect('/posts/index');
}
else
{
$this->Session->setFlash('the post was not saved');
}
}
}
我的模特
class Post extends AppModel {
var $name = 'Post';
var $validate = array(
'title'=>array(
'title_must_not_be_blank'=>array(
'rule'=>'notEmpty',
'message'=>'$this post is missing a title'
),
'title_must_be_unique'=>array(
'rule'=>'isUnique',
'message'=>'A post with this title already exists'
)
),
'body'=>array(
'body_must_not_be_blank'=>array(
'rule'=>'notEmpty',
'message'=>'this post is missing the body'
)
)
);
}
我的观点(我不使用cake html和form helper)
<form action="<?= $this->base.'/posts/add' ?>" method="post">
<label>title</label>
<input type="text" name="data[Post][title]" /><br />
<label>body</label>
<textarea type="text" name="data[Post][body]"></textarea><br />
<input type="submit" value="submit" />
</form>
问题:
当我故意遗漏字段时,表单仍然向数据库提交了值。
我正在努力避免使用html-helpers。
答案 0 :(得分:2)
您确定数据已保存吗?因为即使数据未验证,控制器也会将您重定向到页面。
function add(){
if(!empty($this->data) ) {
if( $this->Post->save($this->data) )
{
$this->Session->setFlash('the post was saved successfully');
$this->redirect('/posts/index');
}
else
{
$this->Session->setFlash('the post was not saved');
}
}
}
下一个问题是验证消息不会显示在视图中。你需要帮助者来创建它们,手动完成这项工作需要做很多工作。我可以问你为什么不使用它们?
答案 1 :(得分:0)
我的回答可能是偏离主题的,但是如果你使用纯HTML只是因为你不需要Form帮助生成的额外html(比如fieldsets,输入包含div,自动生成的标签),那么你可以始终使用表单助手元素选项 例如
<label>title</label> <?php echo $this->Form->input('title',
array('label'=>false, 'div'=>false, 'legend'=>false)
);?>
然而,我完全同意@Charles和@Juhana:框架的真正力量可以在遵循它的约定时释放出来。所以,如果你想让Cake像宣传的那样工作 - 实现为docs advise。