CodeIgniter3提交表单报ArgumentCountError参数数量错误如何解决?
错误原因
报错触发的核心是Staff控制器的donate方法要求必须传入1个$donor参数,运行过程中存在无参数调用该方法的场景:
- 表单提交验证成功后跳转的地址
redirect(base_url('index.php/staff/donate'))没有携带donorID参数,跳转后触发参数缺失错误 - 直接访问
staff/donate路径不传参也会触发相同错误
修复方案
1. 给donate方法添加默认参数+参数校验
修改Staff控制器的donate方法,避免无参数访问直接抛错:
// 给$donor参数设置默认值null,无参数调用时不会触发ArgumentCountError public function donate($donor = null) { // 无有效捐赠者ID时跳转到捐赠者选择页/列表页,可替换为你项目实际的对应路径 if (empty($donor) || !is_numeric($donor)) { $this->session->set_flashdata('error', '请先选择对应捐赠者'); redirect(base_url('index.php/staff')); } $this->load->model('Donor_Model'); $data['donor'] = $this->Donor_Model->donate($donor); $this->load->view('packetregister', $data); }
2. 修改savePacket方法的跳转逻辑
保存成功后跳转回donate页面时,拼接当前捐赠者ID作为参数传递:
public function savePacket($packet = null) { // 新增捐赠者ID合法性校验 if (empty($packet) || !is_numeric($packet)) { $this->session->set_flashdata('error', '捐赠者ID无效'); redirect(base_url('index.php/staff')); } $donatedDate = $this->input->post('packetdonateddate'); $expiringDate = date('Y-m-d', strtotime($donatedDate. ' + 42 days')); $this->form_validation->set_rules('packetdonateddate', 'Donated Date', 'required'); if ($this->form_validation->run()) { $data = [ 'DonorID' => $this->input->post('donorid'), 'DonatedDate' => $this->input->post('packetdonateddate'), 'ExpiringDate' => $expiringDate, 'comments' => $this->input->post('comments'), ]; $this->load->model('Donor_Model'); // 移除原错误赋值:savePacket返回布尔值,不需要赋值给$data['donor'] $this->Donor_Model->savePacket($data); $this->session->set_flashdata('packetsaved', 'Donation successful!'); // 跳转时拼接捐赠者ID参数 redirect(base_url('index.php/staff/donate/'.$this->input->post('donorid'))); } else { $this->donate($packet); } }
内容的提问来源于stack exchange,提问作者Pasindu Ruwandeniya
相关产品推荐
相关产品推荐

