В общем, пока делал регистрацию, решил, что будет проще связать Rainlab.User с шопоголиком, чем Buddies с остальными плагинами и блогом. Если кому-нибудь пригодится, был такой код, недоделанный, но поля проходили валидацию, ошибки выводились под полями, а регистрация работала.
title = "registerold"
url = "/registerold"
layout = "default"
description = "registerold"
is_hidden = 0
[Registration]
mode = "ajax"
redirect_on = 1
redirect_page = "/"
activation = "activation_on"
force_login = 0
==
<?php
use October\Rain\Exception\ValidationException;
use Plugins\Lovata\Buddies\Components\Registration;
function onSubmit()
{
Validator::extend('login_first_letter', function($attribute, $value, $parameters) {
return (preg_match("/^[a-zA-Z].*$/", $_POST['nickname']));
});
Validator::extend('login_last_letter', function($attribute, $value, $parameters) {
return (preg_match("/^.*[a-zA-Z0-9]$/", $_POST['nickname']));
});
Validator::extend('login_char_letter', function($attribute, $value, $parameters) {
return (preg_match("/^[A-Za-z0-9_]*$/", $_POST['nickname']));
});
Validator::extend('pass_char_letter', function($attribute, $value, $parameters) {
return (preg_match("/^[^а-яА-ЯёЁіІЇїєЄ\s]+$/", $_POST['password']));
});
$rules = [
'nickname' => 'required|login_char_letter|login_first_letter|login_last_letter|between:3,20',
'email' => 'required|email',
'password' => 'required|confirmed|min:6|pass_char_letter'
];
$messages = [
'login_first_letter' => 'Логин должен начинаться с латинской буквы.',
'login_last_letter' => 'Логин должен заканчиваться латинской буквой, или цифрой.',
'login_char_letter' => 'Логин может содержать только латинские буквы, цифры и подчёркивания (_).',
'pass_char_letter' => 'Пароль не допускает использования кириллицы и пробелов.'
];
// запускаем валидатор
$validator = Validator::make(post(), $rules, $messages);
// если нашли ошибки, то создаём исключение
if ($validator->fails()) {
throw new ValidationException($validator);
} else {
}
}
?>
==
<div class="uk-container uk-container-large">
<h1>Регистрация</h1>
<form id="register" class="uk-light1" data-request data-request-validate novalidate>
<div class="uk-margin">
<label class="uk-form-label" for="field-email">Email*</label>
<div class="uk-form-controls">
<input data-track-input id="field-email" class="uk-input uk-form-width-large" name="email" type="email" placeholder="Email">
<div class="uk-text-danger" data-validate-for="email"></div>
</div>
</div>
<div class="uk-margin">
<label class="uk-form-label" for="field-nickname">Login*</label>
<div class="uk-form-controls">
<input id="field-nickname" class="uk-input uk-form-width-large" name="nickname" type="text" placeholder="Login">
<div class="uk-text-danger" data-validate-for="nickname"></div>
</div>
</div>
<div class="uk-margin">
<label class="uk-form-label" for="field-password">Password*</label>
<div class="uk-form-controls">
<input id="field-password" class="uk-input uk-form-width-large" name="password" type="password" placeholder="Password">
<div class="uk-text-danger" data-validate-for="password"></div>
</div>
</div>
<div class="uk-margin">
<label class="uk-form-label" for="field-password-confirmation">Password confirmation*</label>
<div class="uk-form-controls">
<input id="field-password-confirmation" class="uk-input uk-form-width-large" name="password_confirmation" type="password" placeholder="Password confirmation">
<div class="uk-text-danger"></div>
</div>
</div>
<button class="uk-button uk-background-primary" type="submit">Зарегистрироваться</button>
</form>
</div>
<script>
$(document).on('ajaxSetup', function(event, context) {
context.options.loading = $.oc.stripeLoadIndicator
});
$('#register').submit(function(event, context){
event.preventDefault();
$(this).request('onSubmit', {
success: function() {
$(this).request('Registration::onAjax', {
success: function(data) {
let type = data.data.field;
let div = $("#field-"+type);
let message = data.message;
if(data.status) {
div.removeClass('uk-form-danger');
} else {
div.addClass('uk-form-danger');
div.next().text(message);
}
}
});
}
});
});
$(document).on('ajaxFail', function() {
alert('Критическая ошибка!')
});
$(window).on('ajaxInvalidField', function(event, fieldElement, fieldName, errorMsg, isFirst) {
alert('ошибка');
var $field = $(fieldElement).closest('.uk-input');
if (!$field.length) {
return
}
event.preventDefault();
$field.addClass('uk-form-danger');
$(window).one('ajaxErrorMessage', function(event, message){
event.preventDefault()
})
});
$(document).on('ajaxPromise', '[data-request]', function() {
alert('успешно');
var $form = $(this).closest('form');
if (!$form.length)
return;
$('.uk-input.uk-form-danger', $form).removeClass('uk-form-danger')
});
</script>