【问题标题】:How to use form validation with the CRUD component in AgileToolkit4?如何在 AgileToolkit4 中将表单验证与 CRUD 组件一起使用?
【发布时间】:2012-08-17 04:21:58
【问题描述】:

每个人。几周前我开始在个人项目中使用 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

【问题讨论】:

    标签: php user-interface frameworks atk4 agiletoolkit


    【解决方案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会自动显示为字段错误。

    【讨论】:

    • 我又想到了一个问题。有没有办法使用 CRUD 组件执行客户端表单验证?或者,更好的是,有没有一种方法可以声明一次验证并在客户端(通过 Javascript)和服务器端都认可它?
    • 罗马语,还有一个问题。我刚刚尝试进行完全相同的验证,但是我没有向页面添加 CRUD,而是添加了一个表单,但它不起作用。相反,会发生“AJAX 响应错误:SyntaxError: Unexpected token
    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 2012-11-28
    • 2011-11-24
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多