使用自定义表单/没有formhelper的Cakephp验证

时间:2013-09-27 04:10:05

标签: php cakephp cakephp-2.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的情况下使用它?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

为了显示错误消息,我们需要将此错误方法放在表单助手中。 即。

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

如果你使用cakephp Formhelper输入法,那么它默认会给出错误信息,就好像你使用任何静态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 form helper方法获取表单的验证错误,如果您不想使用此方法,那么您可以拥有 查看$validationErrors视图属性here

因此您可以使用$this->validationErrors['Knowledgebase']['kb_title']

来收到错误消息