如何在CodeIgniter同一控制器中复用函数?
嘿,我来帮你梳理下CodeIgniter控制器中复用函数的规范实现方式,你当前的代码问题在于reuse_user()里的$data是局部变量,调用后new_appointment()没法直接拿到里面的result_users数据,下面给你几种靠谱的方案:
方案1:让复用函数返回需要的数据
这是最直接的方式,把reuse_user()改成返回处理好的数据,而不是在函数内部处理局部变量。修改后的代码:
public function reuse_user(){ //从arrival表获取数据用于展示 $data_user['fields'] = array( 'id', 'user_name', 'user_email', 'user_psw', 'user_cpsw', 'user_designation', 'usertype_id', 'user_image' ); $data_user['order'] = 'id asc'; //处理从数据库获取数据的逻辑 return $this->mod_users->get_users($data_user); } public function new_appointment(){ // 调用复用函数并接收返回的数据 $data['result_users'] = $this->reuse_user(); $data['related_view'] = 'system_new_appointment'; // 补全你的视图路径 // 加载视图等后续逻辑 $this->load->view('your_template', $data); }
这个方案的好处是函数职责单一,只负责获取用户数据并返回,调用方可以灵活处理返回的结果。
方案2:使用控制器属性共享数据
如果你的复用函数需要处理多个数据,或者要在多个控制器方法中共享这些数据,可以把数据存到控制器的属性里(比如$this->data),这样所有方法都能访问:
// 在控制器类中定义属性 private $data = []; public function reuse_user(){ $data_user['fields'] = array( 'id', 'user_name', 'user_email', 'user_psw', 'user_cpsw', 'user_designation', 'usertype_id', 'user_image' ); $data_user['order'] = 'id asc'; $this->data['result_users'] = $this->mod_users->get_users($data_user); } public function new_appointment(){ $this->reuse_user(); $this->data['related_view'] = 'system_new_appointment'; // 加载视图时直接传入共享的$data属性 $this->load->view('your_template', $this->data); }
这种方式适合需要在多个方法中复用多组数据的场景,避免重复传递变量。
方案3:封装成私有辅助方法(如果需要额外处理)
如果复用的逻辑不仅仅是获取数据,还有其他预处理操作,可以把它封装成私有方法,确保只有当前控制器能调用:
private function get_users_data(){ $data_user['fields'] = array( 'id', 'user_name', 'user_email', 'user_psw', 'user_cpsw', 'user_designation', 'usertype_id', 'user_image' ); $data_user['order'] = 'id asc'; return $this->mod_users->get_users($data_user); } public function new_appointment(){ $data['result_users'] = $this->get_users_data(); $data['related_view'] = 'system_new_appointment'; $this->load->view('your_template', $data); }
用私有方法(private)可以避免这个方法被外部请求直接访问,符合CodeIgniter的MVC规范。
内容的提问来源于stack exchange,提问作者user3806999
相关产品推荐
相关产品推荐

