首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AgileToolkit4中使用CRUD组件的表单验证?

如何在AgileToolkit4中使用CRUD组件的表单验证?
EN

Stack Overflow用户
提问于 2012-08-21 19:03:01
回答 1查看 984关注 0票数 0

所有人。几周前,我开始在一个个人项目中使用atk4,此后一直面临一些困难。我想问的这个具体问题是如何在使用atk4框架附带的CRUD组件时进行表单验证。

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

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

代码语言:javascript
复制
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.');
    }
}

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

最初(在CRUD类中),有一个函数:

代码语言:javascript
复制
function formSubmit($form){
    $form->update();
    $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
}

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

代码语言:javascript
复制
function formSubmit($form){
    if ($form->isSubmitted()) {
        $form->update();
        $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
    }
}

有一个无限循环..。有人能帮我吗?

编辑

最后一个与这个问题密切相关的问题。我只是试着做完全相同的验证,下面罗曼斯提议,但是,不是添加一个CRUD到一个页面,我只是添加一个表单,但它不工作-尽管CRUD确实工作。相反,在AJAX响应中出现了一个“错误: SyntaxError:意外令牌”

EN

回答 1

Stack Overflow用户

发布于 2012-08-23 08:06:34

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

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

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

代码语言:javascript
复制
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');
}

如果模型无法保存自身并将产生异常,表单将自动将其显示为字段错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12061355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档