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