Дополнительные функции AJAX
Вы можете добавить дополнительные CSS и JavaScript файлы при помощи {% framework extras %}
на страницу, чтобы использовать расширенные возможности AJAX фреймворка.
# Индикатор загрузки
Вы можете использовать индикатор загрузки, который отображается наверху страницы во время выполнения AJAX запроса.
Перед выполнением AJAX запроса срабатывает событие ajaxPromise
, которое отображает индикатор загрузки наверху страницы и меняет внешний вид курсора. События ajaxFail
иajaxDone
используются для того, чтобы определить выполнился ли запрос и скрыть индикатор загрузки.
# Валидация формы
Добавьте атрибут data-request-validate
в тег form
, чтобы использовать валидацию.
<form
data-request="onSubmit"
data-request-validate>
<!-- ... -->
</form>
# Обработка исключений
Вы можете использовать класс ValidationException
в своем обработчике для отображения ошибок в форме. Метод принимает один аргумент - массив с именами полей и сообщениями об ошибках.
function onSubmit()
{
throw new ValidationException(['name' => 'You must give a name!']);
}
Note: You can also pass an instance of the validation service as the first argument of the exception.
# Отображение сообщений об ошибках
Используйте тег с атрибутом data-validate-error
внутри формы для отображения первого сообщения об ошибке.
<div data-validate-error></div>
Используйте тег с атрибутом data-message
для отображения всех ошибок.
<div class="alert alert-danger" data-validate-error>
<p data-message></p>
</div>
Вы можете использовать события ajaxInvalidField
и ajaxPromise
, чтобы добавить свои классы при валидации элементов.
$(window).on('ajaxInvalidField', function(event, fieldElement, fieldName, errorMsg, isFirst) {
$(fieldElement).closest('.form-group').addClass('has-error');
});
$(document).on('ajaxPromise', '[data-request]', function() {
$(this).closest('form').find('.form-group.has-error').removeClass('has-error');
});
# Отображение ошибок рядом с полями
Используйте тег с атрибутом data-validate-for
, чтобы отобразить ошибку рядом с полем.
<!-- Input field -->
<input name="phone" />
<!-- Validation message for the field -->
<div data-validate-for="phone"></div>
Если содержимое элемента пустое, то отобразится сообщение, которое пришло с сервера. Но Вы также можете указать произвольный текст.
<div data-validate-for="phone">
Oops.. phone number is invalid!
</div>
# Индикатор загрузки на кнопке
Если элемент содержит атрибут data-attach-loading
, то во время выполнения AJAX запроса у него появится класс oc-loading
.
<form data-request="onSubmit">
<button data-attach-loading>
Submit
</button>
</form>
<a
href="#"
data-request="onDoSomething"
data-attach-loading>
Do something
</a>
# Flash сообщения
Используйте атрибут data-request-flash
в элементе формы
<form
data-request="onSuccess"
data-request-flash>
<!-- ... -->
</form>
и фасад Flash
в обработчике
function onSuccess()
{
Flash::success('You did it!');
}
для отображения флэш-сообщений при успешном выполнении AJAX запроса.
Вы можете отобразить стандартное флэш-сообщение при загрузке страницы при помощи следующего кода на странице или макете.
{% flash %}
<p
data-control="flash-message"
class="flash-message fade {{ type }}"
data-interval="5">
{{ message }}
</p>
{% endflash %}
# Примеры
Пример валидации формы.
<form
data-request="onDoSomething"
data-request-validate
data-request-flash>
<div>
<input name="name" />
<span data-validate-for="name"></span>
</div>
<div>
<input name="email" />
<span data-validate-for="email"></span>
</div>
<button data-attach-loading>
Submit
</button>
<div class="alert alert-danger" data-validate-error>
<p data-message></p>
</div>
</form>
function onDoSomething()
{
$data = post();
$rules = [
'name' => 'required',
'email' => 'required|email',
];
$validation = Validator::make($data, $rules);
if ($validation->fails()) {
throw new ValidationException($validation);
}
Flash::success('Jobs done!');
}
19.02.2019