【问题标题】:How to pass variables into a model's __construct function when using Code Igniter?使用 Code Igniter 时如何将变量传递给模型的 __construct 函数?
【发布时间】:2013-05-30 16:17:29
【问题描述】:

当我从控制器调用模型时,我试图将变量传递给模型...

$this->load->model('Some_model',$var1, $var2);

$var1 和 $var2 从控制器的 index 函数中的 URL 收集。然而这些没有在代码中被拾取?

这是否可能,因为它们从一开始就存在于模型中非常重要?

谢谢。

【问题讨论】:

  • 您还需要将它们添加到构造函数中。你有吗?
  • it is pretty important that they are there from the get go in the model? 那为什么呢?
  • 第二个参数用于重命名模型的实例。例如,$this->load->model("Some_model", "some_model_renamed"); $this->some_model_renamed->blah_blah();
  • 我正在扩展一个库,它需要发生某些事情才能使用它。如果这个模型要做我想做的事,那么我需要提供一些变量来告诉它要访问什么。

标签: php codeigniter


【解决方案1】:

你真的不能使用内置加载器,模型loading code hardcoded 带有空的new 参数(至少在版本 2.1 中)。

您可能希望将代码移动到库中,因为库加载可以采用带有选项的第二个数组参数see here

由于 CI 的加载器只会创建这些类的一个实例,因此您可以将配置移动到配置文件中,然后在 __construct 中从那里读取它们。

或者,您可以扩展 Loader 类并重新实现 model() 方法以获取一些参数(如果您不介意使用第四个参数或类似的参数)。

【讨论】:

  • 我已经通过覆盖我正在编写的模型中的另一个函数来扩展库中的函数来解决这个问题。这样我就可以更动态地完成它需要的所有设置。感谢您的回答。
【解决方案2】:

模型在加载时不接受数据参数。模型反映了应用程序的底层数据模型。这绝不应该根据用户输入而改变。

这里是the documentation for loading models,我相信您已经阅读过(希望您不只是通过猜测来编程‽);有一个可选的第二个参数允许您覆盖模型的名称,但不能用于传递数据。

相反,请考虑使用,或将这些参数传递给任何需要它们的模型函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-02-22
    相关资源
    最近更新 更多