1

我有一个 CI 网站,其中包含两个应用程序文件夹,一个用于前端(用户),另一个用于管理员用户:

/应用程序/前面/
/应用程序/管理员/

在里面/applications/front/helpers/我们有一些类,比如MY_url_helper.php,然后因为我们想在管理区域中使用它,我们有相同的确切代码 /applications/admin/helpers/MY_url_helper.php- 所以当我们修改代码时,它在两个地方。

可以想象,这违反了许多规则!使用 CI 在单个网站上与两个应用程序共享相同的帮助程序/库的更好方法是什么?

4

1 回答 1

-1

好吧,你有几个选择:

  • 保持现状,不要担心“违反规则”。您很可能会发现,最终,您的管理/控制面板将需要一个与前端非常不同的代码库 - 因此,当您最终编写不同的代码时,重复就不是问题了。

  • 将两个应用程序集成为一个。这解决了重复问题,但会导致其他问题,例如需要平衡每个库或帮助程序以在两种环境中正常工作。我在这方面的经验在这里有更详细的介绍,CI 开发人员 Phil Sturgeon 的博客文章总结了如何在此处实施这种做法:http: //philsturgeon.co.uk/blog/2009/07/Create-带有 CodeIgniter 的管理面板

  • 这是我没有使用过但看起来很有希望的一个:Packages。

应用程序“包”

应用程序包允许在单个目录中轻松分发完整的资源集,包括自己的库、模型、帮助程序、配置和语言文件。建议将这些包放在 application/third_party 文件夹中。

无论使用该/third_party目录的建议如何,这可以是您选择的任何目录。

以下是名为“Foo Bar”的应用程序包的目录示例。/application/third_party/foo_bar

配置/
帮手/
语/
图书馆/
楷模/

无论“Foo Bar”应用程序包的用途是什么,它都有自己的配置文件、帮助程序、语言文件、库和模型。要在控制器中使用这些资源,您首先需要通过添加包路径告诉加载器您将从包中加载资源。$this->load->add_package_path()

添加包路径会指示 Loader 类为后续资源请求添加给定路径。例如,上面的“Foo Bar”应用程序包有一个名为 Foo_bar.php 的库。在我们的控制器中,我们将执行以下操作:

$this->load->add_package_path(APPPATH.'third_party/foo_bar/'); $this->load->library('foo_bar');

加载程序的文档解释了完整的详细信息:http: //codeigniter.com/user_guide/libraries/loader.html

再一次,这里是 Phil Sturgeon 的另一篇文章,它可以帮助您了解它是如何工作的:http: //philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

这里的想法是您将拥有第三个“应用程序”文件夹(您的“包”),它将用作加载资源的后备,同时允许您通过在其他任何一个应用程序中放置一个匹配的文件来覆盖该文件,因此,您可以获得共享资源的好处,并且可以灵活地覆盖它们 *.

* 这是我阅读文档时的假设,我没有对此进行测试,因此可能还有更多内容。

您可能希望将包目录放在其他两个应用程序文件夹旁边,并以MY_Controller::__construct()如下方式引用它:

$this->load->add_package_path(FCPATH.'my_package_name/');

我自己还没有使用过包,但是在写完这篇文章之后——我很想在我的下一个项目中检查它。

于 2011-08-21T03:29:06.280 回答