Codeigniter 3.1.9 прохождение и проверка ввода массива не работает - PullRequest
0 голосов
/ 03 июля 2018

Я использую CI 3.1.9 и в своей HTML-форме ниже я создаю динамические входные данные из PHP с ключом и значением, как показано ниже:

<form action="<?= base_url();?>/process" method="post">
<?php
   foreach ($invoices as $invoice) {
   // $invoice has values like 124-55441
?>
   <input type="text" name="amounts[<?= $invoice; ?>]">
<?php } ?>
   <input type="submit", value="submit">
</form>

Теперь в папке config я поместил файл form_validation.php с массивом правил проверки, как показано ниже:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/* Custom Validation Rules */
$config = array(
    'invoices' => array(
        array(
            'field' => 'amounts[]',
            'rules' => 'trim|callback_checkAmountsToPay'
        )
    );
?>

В моем контроллере Process.php я поместил следующий код:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Process extends CI_Controller {
   public function index(){
    if ($this->input->method(TRUE) === "POST") {
            if ($this->form_validation->run("invoices") == FALSE) {
                echo "Validation Failed";
            } else {
                $amounts = $this->input->post("amounts");
                var_dump($amounts);
            }
        } else {
            $this->load->view('invoices');
            //Loading the form to view
        }
   }
   //Custom validation form 
   public function checkAmountsToPay($arrAmounts) {
        var_dump($arrAmounts);//Shows empty value
        $this->input->post("amounts"); //Shows all array sent by the form.
        die();
   }
}
?>

Пользовательский метод проверки checkAmountsToPay всегда отображает пустое значение для массива записей «сумма []», отправленных моей формой, однако, если я добавлю $ this-> input-> post («суммы»); он показывает весь массив, так почему параметры записи не отправляются в пользовательскую функцию проверки?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Нет правильного способа использования arrays в обратных вызовах или правилах проверки, из-за ограничения библиотеки проверки формы Codeigniter's вам придется использовать строки.

Попробуйте это:

if ($this->input->method(TRUE) === 'POST') {
    $amounts = json_encode($this->input->post('amounts'));
    $this->form_validation->set_rules('amounts', 'Amounts', 'callback_checkAmountsToPay[' . $amounts . ']');
    if ($this->form_validation->run('invoices') == FALSE) {
        echo 'Validation Failed';
    } else {
        $amounts = $this->input->post('amounts');
        var_dump($amounts);
    }
} else {
    $this->load->view('welcome_message');
    //Loading the form to view
}

Получить как это:

public function checkAmountsToPay($value, $amounts) {  
    // $value returns first value of $_POST['amounts'][0]
    $amounts = json_decode($amounts);
    print_r($amounts);
}

Или просто использовать в качестве кода в функции обратного вызова

$this->input->post('amounts');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...