cakePHP - 形式值没有验证

时间:2011-07-31 13:42:19

标签: php cakephp

我的控制器:

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。

2 个答案:

答案 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。