Я сделал обратный вызов и у меня есть условие if, которое сравнивает дату платежа в поле ввода с последней датой платежа из базы данных и сегодняшней датой. Оно не должно быть равным или более ранним, чем последняя дата платежа, и должно быть равным или меньшим, чем сегодняшняя дата.
Возвращается значение false, когда я выбираю дату, превышающую сегодняшнюю дату, но возвращает значение true, даже если выбранная дата равна или раньше, чем дата последнего платежа.
Я попытался сравнить поле ввода и дату последнего платежа внутри контроллера, а не в функции обратного вызова, и все работает нормально. Когда я отображаю $ projectID внутри comparePaymentDate, он отображает дату из поля ввода даты вместо идентификатора проекта. Но когда я повторил $ projectID внутри функции validatePaymentAdd, он показывает правильный идентификатор проекта.
В моем контроллере
$validate = $this->my_form_validation_lib->validatePaymentAdd($projectID);
$this->form_validation->set_rules($validate);
и обратный вызов
public function comparePaymentDate($projectID){
$latestPayment = $this->payment_model->getLatestPayment($projectID);
$fieldPaymentDate = strtotime($this->input->post('form_payment_date'));
if($fieldPaymentDate <= strtotime($latestPayment['payment_date']) || $fieldPaymentDate > strtotime(date('Y-m-d'))) {
$this->form_validation->set_message('comparePaymentDate', 'Payment Date should be later date than the latest payment and earlier or equal to the date today.');
return FALSE;
} else{
return TRUE;
}
}
Функция из моей пользовательской библиотеки, которая возвращает правила
function validatePaymentAdd($projectID){
$rules = array(
array(
'field' => 'form_milestone',
'label' => 'Milestone',
'rules' => 'trim|required|alpha_numeric_spaces'
),
array(
'field' => 'form_payment_date',
'label' => 'Payment Date',
'rules' => 'required|callback_comparePaymentDate['.$projectID.']'
),
array(
'field' => 'form_payment_made',
'label' => 'Amount Paid',
'rules' => array(
'trim', 'required', 'greater_than_equal_to[0]',
'callback_payment'
)
),
array(
'field' => 'form_payment_remarks',
'label' => 'Payment Remarks',
'rules' => 'trim|required'
),
array(
'field' => 'remarks_subject',
'label' => 'Remarks Subject',
'rules' => 'trim|required'
),
array(
'field' => 'remarks_field',
'label' => 'Remarks',
'rules' => 'trim|required'
)
);
return $rules;
}
Функция, которая получает дату последнего платежа из базы данных
public function getLatestPayment($projectID){
$this->db->select('payment_date');
$this->db->from('payment');
$this->db->where('project_id', $projectID);
$this->db->order_by('payment_id', 'Desc');
$this->db->limit(1);
$payment = $this->db->get();
return $payment->row_array();
}
Ex:
Дата ввода: 5/2/2019
Дата последнего платежа: 5/5/2019
Он должен вернуть false и вернуть ошибку