所有人。几周前,我开始在一个个人项目中使用atk4,此后一直面临一些困难。我想问的这个具体问题是如何在使用atk4框架附带的CRUD组件时进行表单验证。
我已经尝试过几种不同的解决方案,但都没有解决我的问题。
我有一种感觉,这里的问题可能是表单验证是在方法$form->isSubmitted()的调用中进行的(我是正确的吗?)因为在页面中使用CRUD组件时,我们不使用这种方式来处理表单提交,所以我们必须找到替代它的方法。例如,假设我有一个带有以下init()函数的Page:
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类中),有一个函数:
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到一个页面,我只是添加一个表单,但它不工作-尽管CRUD确实工作。相反,在AJAX响应中出现了一个“错误: SyntaxError:意外令牌”
发布于 2012-08-23 08:06:34
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');
}如果模型无法保存自身并将产生异常,表单将自动将其显示为字段错误。
https://stackoverflow.com/questions/12061355
复制相似问题