有两个应用程序文件夹的一个网站:我如何在CodeIgniter*享代码?

问题描述:

我有一个CI网站,其中包含两个应用程序文件夹,一个用于前端(用户),另一个用于管理用户:有两个应用程序文件夹的一个网站:我如何在CodeIgniter*享代码?

 
/applications/front/ 
/applications/admin/ 

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

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

好了,你有几种选择:

  • 把事情他们不担心“打破规则”的方式。你很可能会发现,最终,你的管理员/控制面板需要一个非常不同的代码库,而不是你的前端 - 所以当你最终编写不同的代码时,重复变得不成问题。

  • 将两个应用程序集成到一个应用程序中。这解决了重复问题,但导致其他问题,如需要平衡每个库或帮助者在两种环境中适当地工作。我对这段经历暴露在更详细here,并有由CI开发商菲尔鲟鱼博客中凝聚了如何实现这种做法在这里:http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter

  • 这是一个我还没有使用,但看起来很有希望:包。

应用“软件包”

应用程序包允许的完整 个资源在同一个目录中易于分发,完成与自己的 库,模型,助手,配置,和语言文件。建议将这些软件包放在 application/third_party文件夹中,这是 。无论使用/third_party目录推荐的

,这可以是您选择的任何目录。

下面是名为“foo栏”的应用程序包 的目录的示例。 /应用/ THIRD_PARTY/foo_bar这样

config/ 
helpers/ 
language/ 
libraries/ 
models/

不管是什么“富酒吧”应用程序包的目的,它有它自己的 配置文件,助手,语言文件,库和模型。至 在您的控制器中使用这些资源,您首先需要告诉 加载程序您将要从程序包加载资源,通过 添加程序包路径。 $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');

的全部细节上的文档对Loader解释说:http://codeigniter.com/user_guide/libraries/loader.html

再一次,这里是另一篇文章由菲尔斯特金关于它可以帮助你了解它是如何工作的:http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

这里的想法是,你将有一个第三个“应用程序”文件夹(您的“软件包”)将用作加载资源的备用文件夹,同时允许您通过在其他应用程序中放置匹配文件来覆盖该文件,这样您可以享受共享资源具有可以覆盖它们的灵活性*。

*这是我从阅读文档中得到的假设,我没有测试过,因此可能会有更多。

你可能会想下一个放置包目录到另外两个应用程序文件夹,并引用它在MY_Controller::__construct()像:

$this->load->add_package_path(FCPATH.'my_package_name/'); 
我没有使用又包自己

,但写这篇文章后, - 我很想去看看我的下一个项目。

+0

那么...你最终做了什么?我很想听听你是否尝试过使用包路径。 –