【问题标题】:Set Global variable from Controller function从控制器功能设置全局变量
【发布时间】:2020-02-14 10:30:22
【问题描述】:

我正在从事 CI 项目,但我被困在某个地方。我尝试从函数设置全局变量值并从其他函数访问该值。这是我的代码..

class Example extends CI_Controller {

    public $gData = "";

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        $this->gData = $userName;
    }

    public function getuserinfo() {
        echo $this->gData;
    }

}

userinfo 是我在浏览器中打开的实际页面,并从用户表中获取用户数据。在我看来,我有点击按钮的按钮,我正在调用 ajax,它调用控制器的getuserinfo 方法,它假设返回我在userinfo 方法中设置的用户名,但unfortunetly 它不起作用。任何人都会plz 指导我在哪里犯错。 (我不允许使用会话)

【问题讨论】:

  • 这两个控制器方法服务于不同的请求。整个控制器正在被销毁并在其间重新创建,它不会保留您在其上设置的任何内容。也不应该,因为如果您同时有两个访客会发生什么?!您需要通过 URL 传递值。

标签: php codeigniter


【解决方案1】:

试试这个:你必须先在全局变量中设置用户名:

class Example extends CI_Controller {

    public $gData = "";

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        $this->gData = $userName;
    }

    public function getuserinfo() {
       $this->userinfo();
        echo $this->gData;
    }

}

或者你可以使用构造函数:我不熟悉 CI

class Example extends CI_Controller {

        public $gData = "";

         Public function __construct() { 
         parent::__construct(); 
         $this->userinfo();
      } 

        public function userinfo() {
            //Here i fetch user infomration from database table 
            $userName = "userName";
            $this->gData = $userName;
        }

        public function getuserinfo() {

            echo $this->gData;
        }

    }

修改后的答案: 根据评论,如果您不想使用会话,解决方案可能是这样的:

1.使用用户信息查询创建视图。

2. 使用该视图创建模型并编写逻辑。 我想这可能会对你有所帮助。它不会减慢您的结果。

【讨论】:

  • 实际上 userinfo 包含获取代码。如果我从 getuserinfo() 调用 userinfo() 方法,获取代码将再次执行,我不想这样做,因为 user 表包含大量数据,执行需要时间。
  • 获取代码有用户表和大量的左连接。每个表都包含大量数据。所以,因此我不想多次调用 fetch 执行。我获取数据一次,从结果中提取一些数据并希望在 getuserinfo() 方法中使用它
  • 好的,我会尝试相同的。
【解决方案2】:

您可以像 Amitesh 所说的那样在构造函数中定义变量,或者您可以将 userinfo() 方法更改为只返回数据,以便 getuserinfo() 方法可以使用它。例如:

class Example extends CI_Controller {

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        return $userName;
    }

    public function getuserinfo() {
        // get the data
        $username = $this->userinfo();
        echo $username;
    }

}

通过调用$this->userinfo(),您将运行该方法,并且返回值将可供进行调用的任何函数(在同一控制器内)使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多