我有一个CI网站,其中包含两个应用程序文件夹,一个用于前端(用户),另一个用于管理员用户:
/applications/front/ /applications/admin/
在/applications/front/helpers/
内部我们有一些类MY_url_helper.php
,然后因为我们想在管理区域中使用它,我们有相同的确切代码
/applications/admin/helpers/MY_url_helper.php
- 所以当我们修改代码时,它在两个地方。
你可以想象,这违背了很多规则!使用CI在单个网站上与两个应用程序共享相同帮助程序/库的更好方法是什么?
答案 0 :(得分:-1)
嗯,你有几个选择:
保持原样,不要担心“违反规则”。您很可能会发现,最终,您的管理/控制面板需要一个与前端完全不同的代码库 - 因此,当您最终编写不同的代码时,重复将成为一个非问题。
将两个应用程序集成为一个。这解决了重复问题但导致其他问题,例如需要平衡每个库或帮助程序以在两个环境中正常工作。我更详细地了解了我的经验here,CI开发人员Phil Sturgeon撰写了一篇博客文章,总结了如何在此实施这一做法:http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter
这是一个我没有用但看起来很有希望的:包。
申请“套餐”
应用程序包允许轻松分发完整版 单个目录中的资源集,包含自己的资源 库,模型,帮助程序,配置和语言文件。它是 建议将这些包放在 application / third_party文件夹。
无论使用/third_party
目录的建议如何,此都可以为您选择的任何目录。
以下是应用程序包的目录示例 名为“Foo Bar”。 /应用/ THIRD_PARTY / foo_bar这样的名称
config/ helpers/ language/ libraries/ models/无论“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/');
我自己还没有使用过包,但在写完这篇文章之后 - 我很想看看我的下一个项目。