ArtiGrid
Callbacks
Callbacks now support full validation logic before executing database operations.
You can define validation rules inside beforeInsert and beforeUpdate hooks, allowing you to validate fields, enforce business rules, and stop the process if needed.
If a callback returns success: false with error details, the operation is automatically canceled and the errors are returned to the frontend for display.
This provides a flexible and centralized way to handle both field-level and global validations.
<?php
// callbacks/name_table.php // productlines.php
return [
'beforeInsert' => [
['callback' => 'insert_paymets', 'file' => 'functions.php'],
],
'beforeUpdate' => [
['callback' => 'update_paymets', 'file' => 'functions.php'],
],
/*'afterInsert' => [
['callback' => '', 'file' => 'functions.php'],
],
'beforeDelete' => [
['callback' => '', 'file' => 'functions.php'],
],*/
];
// file functions.php
function insert_paymets($data) {
$errors = [
'fields' => [],
'global' => []
];
if (empty($data['customerNumber'])) {
$errors['fields']['customerNumber'] = 'Customer is required';
}
if (empty($data['checkNumber'])) {
$errors['fields']['checkNumber'] = 'Check number is required';
} elseif (strlen($data['checkNumber']) > 50) {
$errors['fields']['checkNumber'] = 'Maximum 50 characters allowed';
}
if (empty($data['paymentDate'])) {
$errors['fields']['paymentDate'] = 'Payment date is required';
} elseif (!strtotime($data['paymentDate'])) {
$errors['fields']['paymentDate'] = 'Invalid date format';
}
if (!isset($data['amount']) || $data['amount'] === '') {
$errors['fields']['amount'] = 'Amount is required';
} elseif (!is_numeric($data['amount'])) {
$errors['fields']['amount'] = 'Amount must be a number';
} elseif ($data['amount'] <= 0) {
$errors['fields']['amount'] = 'Amount must be greater than 0';
}
if (!empty($data['paymentDate'])) {
$today = date('Y-m-d');
if ($data['paymentDate'] > $today) {
$errors['global'][] = 'Payment date cannot be in the future';
}
}
if (!empty($errors['fields']) || !empty($errors['global'])) {
return [
'success' => false,
'errors' => $errors,
'data' => $data
];
}
return $data;
}
function update_paymets($data){
$errors = [
'fields' => [],
'global' => []
];
if (empty($data['customerNumber'])) {
$errors['fields']['customerNumber'] = 'Customer is required';
}
if (empty($data['checkNumber'])) {
$errors['fields']['checkNumber'] = 'Check number is required';
} elseif (strlen($data['checkNumber']) > 50) {
$errors['fields']['checkNumber'] = 'Maximum 50 characters allowed';
}
if (empty($data['paymentDate'])) {
$errors['fields']['paymentDate'] = 'Payment date is required';
} elseif (!strtotime($data['paymentDate'])) {
$errors['fields']['paymentDate'] = 'Invalid date format';
}
if (!isset($data['amount']) || $data['amount'] === '') {
$errors['fields']['amount'] = 'Amount is required';
} elseif (!is_numeric($data['amount'])) {
$errors['fields']['amount'] = 'Amount must be a number';
} elseif ($data['amount'] <= 0) {
$errors['fields']['amount'] = 'Amount must be greater than 0';
}
if (!empty($data['paymentDate'])) {
$today = date('Y-m-d');
if ($data['paymentDate'] > $today) {
$errors['global'][] = 'Payment date cannot be in the future';
}
}
if (!empty($errors['fields']) || !empty($errors['global'])) {
return [
'success' => false,
'errors' => $errors,
'data' => $data
];
}
return $data;
}
?>