gpt4 book ai didi

带参数的 CodeIgniter 回调函数

转载 作者:行者123 更新时间:2023-12-01 13:57:46 24 4
gpt4 key购买 nike

(编辑:我已经意识到也许无法在回调中将数组作为参数传递?)

我正在尝试研究如何将参数传递给 CI 中的回调函数。我已经阅读了文档,但除了以下主题外没有太多内容:

To invoke a callback just put the function name in a rule, with "callback_" as the rule prefix. If you need to receive an extra parameter in your callback function, just add it normally after the function name between square brackets, as in: "callback_foo[bar]", then it will be passed as the second argument of your callback function.

我想做的是创建一个回调,检查是否选择了一个不应该选择的。因此,如果有人选择了“请选择”的选项,它将不会被添加到数据库中。任务类型只是一个包含主键和名称字段以及大约 10 行的表。

Controller 所以这是我的 Controller 代码(缩减):

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;
}

查看从模型返回的数据没有问题,但没有验证错误。我的观点如下:

<? $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.)

错误表明传递的信息不是数组,但我什至将数组定义为默认值。我在回调函数中对 $options 数组执行了 print_r(),但它只是打印出一个空数组。

谢谢。

最佳答案

问题出在这里:

"required|callback__Not_Selectable[$not_selectable]"

这转换为字符串:

"required|callback__Not_Selectable[Array]"

这就是在 PHP 中将数组视为字符串时发生的情况。

这个问题是 Codeigniter 的表单验证库的限制,没有正确的方法在回调或验证规则中使用数组,你必须使用字符串。试试这个:

$not_selectable = implode('|', $your_array);

这将生成类似于 1|4|18|33 的内容。然后像您当前所做的那样设置您的规则,但在您的回调中准备好使用竖线分隔的字符串而不是数组,并使用 explode() 创建一个:

function _Not_Selectable($option, $values_str = '')
{
// Make an array
$values = explode('|', $values_str);

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;
}

关于带参数的 CodeIgniter 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com