CodeIgniter:实现外部对象(不是模型、视图或控制器的对象)的最佳方式是什么?

3
我想在CodeIgniter项目中添加一些不是模型、视图或控制器的类。它们很可能是内置模型/控制器,以各种方式使用。我应该把这些类存储在哪里,并且在CodeIgniter中实现它们的最佳方法是什么?(或者更一般地说,在任何基于MVC的框架中?)
编辑:查看了一些CodeIgniter文档,似乎将对象添加到辅助函数是正确的方法,这是正确的吗?

不要将对象放入助手中!!! 助手是过程式的,库是对象。 - Zack
3个回答

9
CI与许多MVC框架不同,它不会使集成外部库变得困难。通常有几种方法: 1.只需include()/require()库并正常使用即可。大多数情况下这很好用,除非存在命名冲突。CI大多数时候都不会干扰,所以这种情况不常见。在这种情况下,您可以将库放在任何您喜欢的位置。通常我会将它们放在共享的“libs”目录中,位于文档根目录之外,因为我不认为它们只会被CI使用。 2.将您的库放在应用程序/libraries中,并使用CI->load()方法加载它们。这对命名约定施加了一些限制,因此您可能需要修改现有库或编写某种包装构造函数。创建库的CI文档The CI docs on creating libraries涵盖得相当全面。 就个人而言,我更喜欢第一种方法。这是使用CI的好处之一。

2

个人而言,如果它不可能是一个库,我会将它放在helpers文件夹中作为objects_helper.php,或者在特殊情况下,将其放在调用它的Library对象相同的文件中。

您还可以查看对象工厂库,这样您就可以使用类似以下内容的东西:

$this->factory->createUserObject( $name, $rank, $serial );

最后,您可以研究钩子框架,但听起来您并不真正想使用它。


如果您觉得在任何其他情况下都不合理(从代码/哲学角度),我只会使用require/include。通常最好尽可能在框架内工作。


从来没说过它不能是一个库,但你提出了一些好的观点/替代方案。创建一个工厂库的想法似乎是可行的路径。 - GSto

1

我建议将其制作成库并只使用$this->load->library(); 了解更多请参见:http://codeigniter.com/user_guide/general/creating_libraries.html

库和助手之间有区别。 如果外部库不是面向对象的,那么您应该将其作为助手;如果它是面向对象的,则应该可以轻松地将其制作成库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接