【问题标题】:Indirect modification of overloaded property in codeigniter model when editing variable set in helper编辑助手中的变量集时间接修改codeigniter模型中的重载属性
【发布时间】:2012-07-23 06:38:46
【问题描述】:

我在我的 codeigniter 设置中设置了一个登录助手。

我得到了 codeigniter 实例,调用了一个模型,并设置了一些变量。

$CI =& get_instance();

然后我使用$CI->load->vars($data); 使变量在我的所有模型和视图中都可用。

其中一个变量如下$data->errors=array();

我的想法是,如果我的模型中有错误,我可以设置错误 例如if($query->num_rows()!='1'){$this->error[]="This message does not exist !";}

然后在我的控制器中,我可以检查此变量是否已填充以及是否显示错误。

然而,这会引发错误

消息:间接修改重载属性 Mail_model::$error 无效

这个错误超出了我的想象。我已经对该错误进行了一些研究,但无法找到任何适用解决方案的 lehmans 术语解释。

谁能帮帮我?

【问题讨论】:

    标签: codeigniter error-handling models helper


    【解决方案1】:

    您已加载 $CI 变量作为对其自身的引用 - 使用 =&

    然后您通过引用加载了变量 - 因为您使用了 $CI->load->vars()

    无需将 $data 加载到 $CI 引用中。

    如果您想在模型和控制器之间传递消息(例如错误消息) - 那么尝试使用全局变量可能不是最好的方法。

    CodeIgniter 的最佳选择是Flashdata - 这正是 flashdata 存在的确切场景。您可以在 CI userguide 中阅读所有相关信息。

    【讨论】:

    • 这里如何使用 flashdata?如果有错误,它会设置闪存数据..但这只能在下一个服务器请求之后使用,所以没有用..?控制器调用一个模型,该模型将错误设置为闪存数据..但没有进一步的服务器请求访问此设置值..
    • "但是这只能在下一个服务器请求之后使用,所以没有用..?" - 错误 - 在下一个服务器请求之前可以使用它。因此您可以设置 flashdata - 然后立即使用它
    • 附注我知道这是真的——因为这正是我所做的。
    • 不是:P 我刚刚创建了一个单独的空控制器和模型来测试它。如果我从控制器加载模型并在模型函数中将变量设置为 flash var,然后在我的控制器中的此调用正下方回显此 set flash var,则它不起作用。但是,如果我刷新页面,则会输出 flash var..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多