如何在AgileToolkit4中使用CRUD组件进行表单验证?

时间:2012-08-21 19:03:02

标签: php user-interface frameworks atk4 agiletoolkit

大家。几个星期前我开始在个人项目中使用atk4,从那以后一直面临着一些困难。我想问的这个具体问题是关于如何在使用atk4框架附带的CRUD组件时进行表单验证。

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

我觉得这里的问题可能是表单验证在方法$form->isSubmitted()的调用中发生(我是否正确?)。由于在页面中使用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'));
    }
}

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


[编辑]

最后一个与此问题密切相关的问题。我刚刚尝试进行下面罗马语提出的完全相同的验证,但是,我只是添加一个表单,而不是添加一个表单,它不起作用 - 虽然CRUD确实有效。相反,发生了“AJAX响应中的错误:SyntaxError:意外的令牌

1 个答案:

答案 0 :(得分: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会自动将其显示为字段错误。