![]() |
Issue with validation - Printable Version +- CodeIgniter Forums (https://forum.codeigniter.com) +-- Forum: CodeIgniter 4 (https://forum.codeigniter.com/forumdisplay.php?fid=28) +--- Forum: CodeIgniter 4 Support (https://forum.codeigniter.com/forumdisplay.php?fid=30) +--- Thread: Issue with validation (/showthread.php?tid=77374) |
Issue with validation - 68thorby68 - 08-23-2020 Are there known bugs with CI4 Validation using the config/validation.php file? This doesn't work as per the documentation? Is there a preferred method or workaround when using the validation library? RE: Issue with validation - snelledre - 08-23-2020 Hi, With this info we can't help you. More info (code) is welkom. RE: Issue with validation - 68thorby68 - 08-24-2020 The reason I ask, is because I have asked questions about validation before (see beow) and there seems to be no answers. I thlught I might be missing something, like there was known errors or bugs. I have simple validation rules configured in Config/Validation.php public $Quote_value = [ 'quote_value' => [ 'rules' => 'required|decimal', 'errors' => [ 'required'=> 'Quote Value is required', 'decimal' => 'Quote Value must be a valid number i.e. 100.00.' ] ], 'labour_estimate' => [ 'rules' => 'required|decimal', 'errors' => [ 'required'=> 'Labour Estimate is required', 'decimal' => 'Labour Estimate must be a valid number i.e. 100.00.' ] ], 'costs_estimate' => [ 'rules' => 'required|decimal', 'errors' => [ 'required'=> 'Costs Estimate is required', 'decimal' => 'Costs Estimate must be a valid number i.e. 100.00.' ] ], ]; My controller PHP Code: if ($this->request->getPost('quote_value')) { $data['quote_value'] = number_format($this->request->getPost('quote_value', FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND),2); }else{ $data['quote_value'] = ''; } if ($this->request->getPost('labour_estimate')) { $data['labour_estimate'] = number_format($this->request->getPost('labour_estimate', FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND),2); }else{ $data['labour_estimate'] = ''; } if ($this->request->getPost('costs_estimate')) { $data['costs_estimate'] = number_format($this->request->getPost('costs_estimate', FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND),2); }else{ $data['costs_estimate'] = ''; } if($this->request->getServer('REQUEST_METHOD') == 'POST'){ helper(['form', 'url']); $this->validation->reset(); //Standalone Validation $this->validation->setRules([ 'quote_value' => 'required|decimal' ]); //Validate using Config/Validation.php if(!empty($data['quote_value']) || !empty($data['labour_estimate']) || !empty($data['costs_estimate'])) { $this->validation->run($data, 'Quote_value'); } $this->validation->run($data, 'Quote'); $validation_errors=$this->validation->listErrors(); if(!empty($validation_errors)) { return redirect()->back()->withInput()->with('validation', $this->validation->listErrors()); }else{ ... do something else; } } When quote_value = 100.00, labour_estimate=20.00, costs_estimate=10.00, and //Standalone Validation is used. NO ERRORS reported Using the same values and //Validate using Config/Validation.php. ERROR "The quote_value field must contain a decimal number." NOTE: I only use one validation method at a time when running the tests. This is strange on 4 levels 1) I did not expect an error returned 2) Why would the same rule work using one method and not the other 3) Why would one field fail validation and the other pass, when essentiallly they are identical 4) Why is CI4 not returning the text defined in 'errors' array of the validation rule (i.e. "Quote Value must be a valid number i.e. 100.00."). Note I get the same text using getErrors() and listErrors() I am viewing the validation reponse PHP Code: <?php if (session()->has('validation')) : ?> <div class="alert alert-danger alert-dismissible"> <?= session('validation') ?> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </div> <?php endif ?> Very, very strange?? |