我已经安装了OctoberCMS的新副本,添加了用户插件,并创建了主题。一切都很新鲜,没有插件修改。现在我创建了注册页面并对其进行测试。表单验证看起来有点搞笑。我将所有字段留空,然后单击“提交”按钮。
它抛出这样的警告框,这有点出乎意料。
然后,如果我再次单击“提交”按钮,则表单验证会显示字段错误 - 通常情况下会如此。我只是在没有弹出框的情况下想要这种警报..
任何人都知道为什么会这样?
答案 0 :(得分:1)
由于您提交了一份未通过模型验证规则的表单,因此您在OctoberCMS的AJAX框架中抛出了javascript alert name field is required
。
检查您的用户模型,您可能会注意到name
字段是必需的。
public $rules = [ 'name' => 'required' ]; // no name was supplied
这里有两个选项;
使用JS
提交前验证表单数据 $('button.submit').click(function(e){
e.preventDefault(); // prevent submission
// check Form fields are valid
// then Submit form using the AJAX API - OnCreateUser
$.request('onCreateUser', {
data: {name : ..., surname: ....}, // Data Object
error: function(jqXHR, textStatus, error){
// handle errors..
}
});
});
为您的网站使用全局AJAX处理程序 - 弹出窗口不会显示,但您需要处理这些事件并提醒用户
$window.on('ajaxErrorMessage', function(event, message){
// ....
event.preventDefault();
});
$window.on('ajaxError', function(event, context, status,jqXHR ){
// ....
event.preventDefault();
});
此外,建议您使用组件中的validator类并检查提交的数据 - 您还可以添加自定义验证规则/消息
public function onCreateUser()
{
if (Request::ajax()) {
$customMessages = [
'name.required' => 'Name Field is required',
'email.required' => 'Email field is required',
];
$customAttributes = [
'email' => 'Email',
'name' => 'Name',
];
$data = post();
$rules['name'] = 'required';
$rules['email'] = 'required';
$validation = Validator::make($data, $rules,$customMessages, $customAttributes);
if ($validation->fails()) {
$messages = json_encode($validation->messages(), true);
throw new ValidationException(array(
'title' => 'Error Creating User',
'message' => $messages
));
}
..........
}
}