0

0

在 CodeIgniter 控制器中传递函数计算值

霞舞

霞舞

发布时间:2025-08-27 23:13:01

|

918人浏览过

|

来源于php中文网

原创

在 codeigniter 控制器中传递函数计算值

在 CodeIgniter 控制器中,如何在不同的函数之间传递计算后的变量值。重点讲解了通过控制器类的属性以及函数参数传递数据的方法,并提供了代码示例,帮助开发者理解如何在控制器内部共享数据,避免使用 Session 或 Cookie 等方式。

在 CodeIgniter 框架中,经常需要在同一个控制器内的不同函数之间共享数据。例如,一个函数计算得到一个值,需要在另一个函数中使用。本文将介绍几种在 CodeIgniter 控制器中传递变量的方法,并提供示例代码。

方法一:使用控制器类的属性

最常用的方法是将变量定义为控制器的属性。这样,控制器内的所有函数都可以通过 $this->属性名 访问该变量。

input->post('adminEmail');
        $adminPassword =  $this->input->post('adminPassword');
        if ($adminEmail != "" && $adminPassword != "") {
            $query = $this->db->query("select * from admin_tbl where email= '$adminEmail' and password = '$adminPassword'");
            //if user exist
            if ($query->num_rows() <= 0) {
                $response = array();
                $this->jwtoken = ""; // 初始化控制器属性
                $this->session->set_flashdata("invalid", "Wrong email or password");
                $response = array(
                    'status' => 'invalid',
                    'message' => $_SESSION['invalid'],
                    'token' => $this->jwtoken,
                );
                //used to send finalized values
                $this->output
                    ->set_content_type('application/json')
                    ->set_output(json_encode($response));
                return $this->jwtoken;  //return value
            } else {
                //  $this->session->set_userdata('adminEmail', $adminEmail);
                $response = array();
                $jwt = new JWT();
                $data = array(
                    'adminEmail' => $adminEmail,
                    'iat' => time()
                );
                $this->jwtoken = $jwt->encode($data, jwtSecretKey, 'HS256'); // 设置控制器属性
                // I want to pass $jwtoken's variable to all the functions in a controller

                $this->session->set_flashdata("login", "Scucessfully login!");
                //  if (isset($_SESSION['adminEmail'])) {
                if ($this->jwtoken != "") {
                    $response = array(
                        'status' => 'valid',
                        'message' => $_SESSION['login'],
                        'token' => $this->jwtoken
                    );
                }
                $abc = $this->jwtoken;
                //used to send finalized values
                $this->output
                    ->set_content_type('application/json')
                    ->set_output(json_encode($response));
                return $this->jwtoken; //return value
            }
        }
    }

    public function addNew() {
        $response = array();
        echo $this->jwtoken; // 访问控制器属性
    }
}
?>

说明:

  1. 在 Employees 类中,我们首先定义了一个私有属性 $jwtoken。
  2. 在 auth() 函数中,我们计算得到 $jwtoken 的值,并将其赋值给 $this->jwtoken。
  3. 在 addNew() 函数中,我们通过 $this->jwtoken 访问了 $jwtoken 的值。

优点:

  • 简单易懂,易于实现。
  • 可以在控制器内的任何函数中使用。

缺点:

Teleporthq
Teleporthq

一体化AI网站生成器,能够快速设计和部署静态网站

下载
  • 如果控制器属性过多,可能会导致代码难以维护。
  • 所有函数都可以修改该属性,可能导致数据混乱。

方法二:通过函数参数传递

另一种方法是将变量作为参数传递给需要使用它的函数。

input->post('adminEmail');
        $adminPassword =  $this->input->post('adminPassword');
        if ($adminEmail != "" && $adminPassword != "") {
            $query = $this->db->query("select * from admin_tbl where email= '$adminEmail' and password = '$adminPassword'");
            //if user exist
            if ($query->num_rows() <= 0) {
                $response = array();
                $jwtoken = "";
                $this->session->set_flashdata("invalid", "Wrong email or password");
                $response = array(
                    'status' => 'invalid',
                    'message' => $_SESSION['invalid'],
                    'token' => $jwtoken,
                );
                //used to send finalized values
                $this->output
                    ->set_content_type('application/json')
                    ->set_output(json_encode($response));
                return $jwtoken;  //return value
            } else {
                //  $this->session->set_userdata('adminEmail', $adminEmail);
                $response = array();
                $jwt = new JWT();
                $data = array(
                    'adminEmail' => $adminEmail,
                    'iat' => time()
                );
                $jwtoken = $jwt->encode($data, jwtSecretKey, 'HS256');
                // I want to pass $jwtoken's variable to all the functions in a controller

                // this is one way you can pass the value to another function, depending on what you want to do, you can also place a condition and continue only if the return value of the following function is respected:
                $this->addNew($jwtoken);
                // What is the addNew() supposed to do?

                $this->session->set_flashdata("login", "Scucessfully login!");
                //  if (isset($_SESSION['adminEmail'])) {
                if ($jwtoken != "") {
                    $response = array(
                        'status' => 'valid',
                        'message' => $_SESSION['login'],
                        'token' => $jwtoken
                    );
                }
                $abc = $jwtoken;
                //used to send finalized values
                $this->output
                    ->set_content_type('application/json')
                    ->set_output(json_encode($response));
                return $jwtoken; //return value
            }
        }
    }

    public function addNew($jwtoken = "default_value_if_not_set") {
        echo $jwtoken;
    }
}
?>

说明:

  1. 在 auth() 函数中,我们计算得到 $jwtoken 的值。
  2. 我们调用 addNew() 函数,并将 $jwtoken 作为参数传递给它。
  3. 在 addNew() 函数中,我们接收 $jwtoken 参数,并使用它。

优点:

  • 可以明确指定哪些函数可以使用该变量。
  • 避免了全局变量可能导致的问题。

缺点:

  • 如果需要传递的变量很多,可能会导致函数签名过长。
  • 需要在每次调用函数时都传递参数,比较繁琐。

总结

在 CodeIgniter 控制器中传递变量,可以使用控制器类的属性或函数参数传递。选择哪种方法取决于具体的应用场景。如果需要在多个函数中使用同一个变量,并且不希望频繁传递参数,则可以使用控制器类的属性。如果只需要在特定的函数中使用该变量,并且希望明确指定哪些函数可以使用该变量,则可以使用函数参数传递。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6419

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

343

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

410

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

308

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

740

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.09.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.8万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号