(Правка. С тех пор я понял, что, возможно, невозможно передать массивы в качестве параметров в обратных вызовах?)
Я пытаюсь понять, как передать параметры в функцию обратного вызова в CI. Я прочитал документацию, но по этому вопросу не так много, кроме:
Чтобы вызвать обратный вызов, просто поместите имя функции в правило, с
"callback_" в качестве префикса правила. Если вам нужно получить дополнительную
параметр в функции обратного вызова, просто добавьте его обычно после
имя функции в квадратных скобках, например: "callback_foo [bar]",
тогда он будет передан как второй аргумент вашего обратного вызова
функция.
То, что я пытаюсь сделать, это создать обратный вызов, который проверяет, был ли выбран объект, который не должен был быть. Поэтому, если кто-то выберет опцию «Пожалуйста, выберите», он не будет добавлен в базу данных. Типы задач - это просто таблица с первичными ключами, полем имени и примерно 10 строками.
Контроллер
Итак, вот мой код контроллера (вырублено):
function Add_Task()
{
$task_types_get = $this->task_model->Get_Task_Types();//Get available task types.
$this->options->task_types = $task_types_get->result();
$not_selectable = array(1);//Non selectable values for select. Added to callback function below for validation. These are pks.
$this->form_validation->set_rules("task_type","Task Types","required|callback__Not_Selectable[$not_selectable]");
if($this->form_validation->run())
{
//Add to db etc..
}
}
Обратный вызов
И мой обратный вызов, чтобы проверить, если что-то не выбирается:
function _Not_Selectable($option,$values=array())
{
if(in_array($option,$values))//Is the value invalid?
{
$this->form_validation->set_message('_Not_Selectable', 'That option is not selectable.');
return false;
}
return true;
}
View
Данные, возвращаемые из модели, в порядке, но ошибок проверки нет. Мой взгляд таков:
<? $this->load->view('includes/header'); ?>
<?=form_open();?>
<div class="form_row">
<div class="form_field">
<label for="task_desc">Task Type</label>
</div>
<div class="form_field name_element" id="name-list">
<select name="task_type" id="task_select">
<? foreach($task_types as $t => $v):
echo "<option ".set_select('task_type', $v->tt_id)." value=\"{$v->tt_id}\">{$v->name}</option>\n";
endforeach;
?>
</select>
<?=form_error('task_type');?>
</div>
</div>
<?=form_submit('add_task', 'Add Task');?>
<?=form_close();?>
<? $this->load->view('includes/footer'); ?>
Ошибка
Я получаю ошибку:
A PHP Error was encountered
Severity: Warning
Message: in_array() [function.in-array]: Wrong datatype for second argument
Filename: controllers/tasks.php
Line Number: 112 (NOTE: this is the in_array line in the callback function.)
Ошибка предполагает, что передаваемая информация не является массивом, но я даже определил массив по умолчанию. Я сделал print_r () для массива $ options в функции обратного вызова, но он просто распечатал пустой массив.
Спасибо.