当前位置:  开发笔记 > 编程语言 > 正文

您可以从CodeIgniter中的另一个模型中访问模型吗?

如何解决《您可以从CodeIgniter中的另一个模型中访问模型吗?》经验,为你挑选了2个好方法。

我正在使用需要身份验证的CodeIgniter编写webapp.我创建了一个处理所有身份验证的模型.但是,我找不到从另一个模型中访问此身份验证模型的方法.有没有办法从另一种模式内部访问模型,或者在CodeIgniter中处理身份验证的更好方法?



1> Christian Da..:

看起来你可以在模型中加载模型,尽管你可能应该以另一种方式解决这个问题.有关讨论,请参阅CodeIgniter论坛.

class SomeModel extends Model
{
  function doSomething($foo)
  {
    $CI =& get_instance();
    $CI->load->model('SomeOtherModel','NiceName',true);

    // use $CI instead of $this to query the other models
    $CI->NiceName->doSomethingElse();
  }
}

另外,我不明白Till所说的不应该在对象内部创建对象.你当然应该!将对象作为参数发送对我来说不太清楚.


抱怨是这样做不必要地在两个模型之间产生了更强的依赖性.例如,当您进行测试时,能够为SomeModel提供SomeOtherModel的模拟版本是一件好事.如果前者直接加载后者,你不能这样做.或者您稍后修改代码以使用具有相同界面的不同模型,例如当您重构现有代码以使用插件系统时.

2> Till..:

通常,您不希望在对象内创建对象.这是一个坏习惯,而是编写一个清晰的API并将模型注入模型中.

setWhatever($model1);
?>


什么不是好的做法?注入依赖关系**是很好的做法!
我不想进一步争论这个问题,因为每隔几个月就会有人表达自己的观点.有一种称为依赖注入(DI)的东西,它允许你和我交换对象的依赖关系 - 如果有的话,这对于"可维护代码"(代码质量)和LBNL进行测试是有利的.认为你不需要单独测试对象很好,但是你不再需要进行单元测试了.当您的目标是测试业务逻辑时,您最终会在下面测试整个框架和数据库.这样不会更容易在代码中找到错误.
是的,更好的做法是"注入"依赖关系,而不是在Model1中初始化Model2.
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有