0

我可以在没有 formhelper 的情况下使用 Cakephp 验证吗?

例如,我是这样创建模型、控制器和视图的

模型:

class KnowledgeBase extends AppModel {
   public $useTable = 'corp_kb';

 public $validate = array(
        'kb_title' => array(
            'rule' => array('minLength', '2'), 
            'required' => true,
            'message' => 'min 2 char'
        ),
);
}

控制器:

class KnowledgeBaseController extends AppController 
{
var $name = 'KnowledgeBase';
var $ext = '.php';
public $helpers = array ('Html', 'Form', 'Js');

function kb_fill()
    {
    $this->layout = 'ajax';
    }

function kb_input()
    {
    $this->autoRender = false;
    $this->KnowledgeBase->set($this->data);
    if(!empty($this->data))
    {
        if($this->KnowledgeBase->validates())
        {
        debug($this->data);
        }
        else
        {

        }
    }
    else 
    {
    echo "data empty";
    }
    }

查看“kb_fill”:

<form id="kb_frm" method="get" action="" >
<input type="text" name="data[Knowledgebase][kb_title]"/>
<button id="postbutton">Post !</button>
</form>

出于某种原因,我使用 ajax 通过按钮 id 将帖子加载到 kb_input 中,并且不能使用通常的方法。cakephp 验证不起作用,或者没有显示消息错误,如果没有 formhelper,我该如何使用它?

4

2 回答 2

0

你已经成功了一半。Controller 中的方法$this->KnowledgeBase->validates()只会返回trueor false。要手动处理验证错误,您需要:

if ($this->KnowledgeBase->validates()) {
    // it validated logic
} else {
    // didn't validate logic
    $errors = $this->KnowledgeBase->validationErrors;
}

从Validating Data from Controller中获取代码示例,我建议您看一下它,因为您可能会找到有关如何通过 Controller 验证数据的更多信息。

于 2013-09-27T04:18:27.390 回答
0

为了显示错误消息,我们需要将这个错误方法放入表单助手。IE

<?php echo $this->Form->error('kb_title') ?>

如果您使用 cakephpFormhelper输入法,则默认情况下会给出错误消息,而如果您使用像您这样的任何静态 html,那么您必须使用表单助手的错误方法来显示错误消息。

<form id="kb_frm" method="get" action="" >
<input type="text" name="data[Knowledgebase][kb_title]"/>
<?php echo $this->Form->error('kb_title') ?>
<button id="postbutton">Post !</button>
</form>

error您可以使用of 方法获取表单的验证错误form helper,如果您不想使用此方法,则可以在此处$validationErrors查看视图属性

所以你可以通过使用得到错误消息$this->validationErrors['Knowledgebase']['kb_title']

于 2013-09-27T08:36:40.457 回答