0

每个人。几周前我开始在个人项目中使用 atk4 并且从那时起一直面临一些困难。我想问的这个具体问题是关于如何在使用 atk4 框架附带的 CRUD 组件时进行表单验证。

我已经尝试了几种不同的解决方案,但都没有解决我的问题。

我有一种感觉,这里的问题可能是表单验证发生在方法的调用中$form->isSubmitted()(我正确吗?)。因为当在 Page 中使用 CRUD 组件时,我们不使用那种处理表单提交的方式,所以我们必须找到它的替代方案。例如,假设我有一个具有以下 init() 函数的页面:

function init() {
    parent::init();

    // create a CRUD and set a model to it
    $crud = $this->add('CRUD');
    $m = $crud->setModel('Person');

    if ($crud->form) {
        $fn = $crud->form->getField('first_name');
        $fn->validateNotNull('The first name must not be empty.');
    }
}

即使我已将验证添加到名字字段,它也不会被验证。我尝试了几件事,都不成功。我尝试扩展 CRUD 类并重新实现该formSubmit($form)函数,在那里添加验证。即使我这样做,它也不起作用。

最初(在 CRUD 类中),有以下功能:

function formSubmit($form){
    $form->update();
    $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
}

我试图遍历表单的字段并调用它的validate()方法,但是没有用。另外,如果我尝试更改函数(比如说在 MyCRUD 类中),如下所示,

function formSubmit($form){
    if ($form->isSubmitted()) {
        $form->update();
        $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
    }
}

发生了一个无限循环......有人可以帮我吗?


[编辑]

最后一个问题与这个问题密切相关。我刚刚尝试执行以下 romanish 提出的完全相同的验证,但是,我没有向页面添加 CRUD,而是添加了一个表单,但它不起作用——尽管 CRUD 确实有效。相反,会出现“AJAX 响应错误:SyntaxError: Unexpected token

4

1 回答 1

1

CRUD 组件尊重您在模型中进行的验证。当数据输入表单并单击按钮时,$model->update()将调用。

执行继续进入 beforeUpdate() 钩子,这是您需要拦截的钩子。

http://agiletoolkit.org/learn/understand/model/actions

class Model_Book extends Model_Table {
  function init(){
    parent::init();
    // .... more definitions ...

    $this->addHook('beforeSave',$this);
  }

  function beforeSave(){
    if(strlen($this['book_name']<10))
       throw $this->exception('Name of the book is too short')
            ->setField('book_name');
}

如果模型无法自行保存,会产生异常,Form 会自动将其显示为字段错误。

于 2012-08-23T08:06:34.113 回答