CodeIgniter:通过控制器的全局变量和对重载属性的间接修改

流行音乐

自CodeIgniter成立之初到现在,我一直困扰着我一个问题,对于新的CI 3,我想看看是否有更优雅的方法来解决它。

// file: application/core/MY_Controller.php
class MY_Controller extends CI_Controller {

   public $GLO;

   function __construct(){
      parent::__construct();
      $this->GLO['foo'] = 'bar';
      $this->GLO['arr'] = array();
   }
}

然后,在代码后面,我需要动态获取并设置$ GLO变量的值。因此,例如:

// file: application/controllers/dispatcher.php
class Dispatcher extends MY_Controller {

   function __construct() {
     parent::__construct();
     $this->load->model('public/langs');
     print_r($this->GLO);
   }
}

将打印array('foo'=>'bar, 'arr'=>Array())正确的。同样在我的模型中,我可以以相同的方式获取$ GLO数组的值。但是,一旦我需要在$ GLO数组中设置任何值,我就会得到Indirect modification of overloaded property notice,因此我陷入了困境。在我的模型中(执行数据库查询后):

// file: application/models/public/langs.php
class Langs extends CI_Model {

function __construct(){
    parent::__construct();  
}

function set_global_languages(){
  print_r($this->GLO); // <<< prints the same values as in the controller above
  $temp = array();
  // [stripped db code]
  $temp['label'] = $row->label;
  $temp['id'] = $row->id;      
  $this->GLO['arr'][] = $temp; // <<< this is where the notice happens
}

关于如何$this->GLO['foo'] = 'baz';在模型中设置此全局数组的属性的任何线索

干杯。

流行音乐

sintakonte,非常感谢您的提示。昨晚我不得不重写大量代码以查看其是否起作用以及如何起作用。注册表类按预期工作!这种set / get方法的唯一问题是对深层数组的处理,尤其是那些动态创建的数组以及它们的数据也被动态推送的数组。所以今天早上我做了一些非常糟糕的事情:),并创建了这个类:

class Globals {
  public $data = array();
}

因此,现在我要从头开始$this->GLO['foo']$this->globals->data['foo']并保持现有语法完整!这也使我可以在使用不同名称的不同控制器模型中重用该类,一旦将其初始化为“ globals”,另一次初始化为“ admin”。似乎也可以正常工作!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行和控制器angularjs之间的全局变量

来自分类Dev

运行和控制器angularjs之间的全局变量

来自分类Dev

使用 IF 控制器和全局变量的 JMETER 4.0

来自分类Dev

Rails:如何将全局变量从路由传递到控制器和助手?

来自分类Dev

Rails:如何将全局变量从路由传递到控制器和助手?

来自分类Dev

laravel控制器-全局变量(字段)

来自分类Dev

Laravel 5.2控制器中的全局变量

来自分类Dev

创建全局变量yml / ini以从控制器访问

来自分类Dev

Laravel 5.2控制器中的全局变量

来自分类Dev

在不使用全局变量的情况下跨多个视图控制器检查数据修改的方法?

来自分类Dev

根据对象属性修改全局变量

来自分类Dev

根据对象属性修改全局变量

来自分类Dev

通过链接功能修改指令控制器变量

来自分类Dev

通过emberJS中的控制器修改组件的属性

来自分类Dev

从控制器AngularJS修改全局值

来自分类Dev

如何在Symfony 2中为所有控制器设置全局变量?

来自分类Dev

全局变量与直接连接在视图控制器之间传递数据

来自分类Dev

AngularJs:如何在控制器外部访问全局变量?

来自分类Dev

如何使用函数将值更改为作用域中的全局变量?(“控制器为”)

来自分类Dev

在Rails中为所有控制器创建一个全局变量

来自分类Dev

应用程序控制器中的全局变量?

来自分类Dev

如何在Symfony 2中为所有控制器设置全局变量?

来自分类Dev

在模型中可访问的全局变量,而无需传递控制器的任何信息

来自分类Dev

从控制器调用全局变量到HTML View AngularJS

来自分类Dev

从第二个视图控制器访问全局变量时的预期声明

来自分类Dev

如何从类内部更改全局变量并在不同的视图控制器中访问?

来自分类Dev

在差异视图控制器中使用时,全局变量返回nil值

来自分类Dev

使用相同的全局变量实例化多个视图控制器

来自分类Dev

将 Twig 全局变量转换为 symfony 控制器

Related 相关文章

  1. 1

    运行和控制器angularjs之间的全局变量

  2. 2

    运行和控制器angularjs之间的全局变量

  3. 3

    使用 IF 控制器和全局变量的 JMETER 4.0

  4. 4

    Rails:如何将全局变量从路由传递到控制器和助手?

  5. 5

    Rails:如何将全局变量从路由传递到控制器和助手?

  6. 6

    laravel控制器-全局变量(字段)

  7. 7

    Laravel 5.2控制器中的全局变量

  8. 8

    创建全局变量yml / ini以从控制器访问

  9. 9

    Laravel 5.2控制器中的全局变量

  10. 10

    在不使用全局变量的情况下跨多个视图控制器检查数据修改的方法?

  11. 11

    根据对象属性修改全局变量

  12. 12

    根据对象属性修改全局变量

  13. 13

    通过链接功能修改指令控制器变量

  14. 14

    通过emberJS中的控制器修改组件的属性

  15. 15

    从控制器AngularJS修改全局值

  16. 16

    如何在Symfony 2中为所有控制器设置全局变量?

  17. 17

    全局变量与直接连接在视图控制器之间传递数据

  18. 18

    AngularJs:如何在控制器外部访问全局变量?

  19. 19

    如何使用函数将值更改为作用域中的全局变量?(“控制器为”)

  20. 20

    在Rails中为所有控制器创建一个全局变量

  21. 21

    应用程序控制器中的全局变量?

  22. 22

    如何在Symfony 2中为所有控制器设置全局变量?

  23. 23

    在模型中可访问的全局变量,而无需传递控制器的任何信息

  24. 24

    从控制器调用全局变量到HTML View AngularJS

  25. 25

    从第二个视图控制器访问全局变量时的预期声明

  26. 26

    如何从类内部更改全局变量并在不同的视图控制器中访问?

  27. 27

    在差异视图控制器中使用时,全局变量返回nil值

  28. 28

    使用相同的全局变量实例化多个视图控制器

  29. 29

    将 Twig 全局变量转换为 symfony 控制器

热门标签

归档