我目前正在使用CodeIgniter来支持一个站点,其主要目的是显示多个可编辑的tablekit表,并处理编辑它们时到达的AJAX。一种PHPMyAdmin [VERY] Lite。它有许多核心助手和控制器,它们运行站点的主要工作,与一些特定于站点的控制器和助手混合。
我想重构我的网站,以便我可以在其他网站中重用核心代码库。但是,我仍然希望在同一个控制器中有一些默认的控制器功能和一些cutom功能;即在某个系统文件中:
class My_core extends Controller{
/*
Lots of base functions
*/
}
并在一个网站上:
class site_1 extends My_Core{
/*
Site specific functions
*/
}
然后在另一个网站上:
class site_2 extends My_Core{
/*
Site specific functions
*/
}
有没有人对如何做到这一点有任何指导?
谢谢,
Lemiant
答案 0 :(得分:3)
如果您使用的是CodeIgniter 2.0,则可以通过软件包实现大部分功能。它们将允许您从任何地方加载帮助程序,库和模型,因此在每个应用程序中只需配置要从该共享文件夹加载的程序包。
对于核心库(MY_Controller将是),你必须实现自己的__autoload()函数:
http://php.net/manual/en/language.oop5.autoload.php
您可以将自动加载器放在config.php的底部。只要它检查正确的文件夹(首先是本地文件夹,然后是共享文件夹结构),它应该都可以正常工作。
答案 1 :(得分:1)
我不知道这对你是否仍然有帮助,但这是我所做的。
说我有2个网站,palladium.com和osmium.com。
我的文件树看起来像这样
/var/www/system/ (the CI system folder)
/var/www/palladium/application
/var/www/palladium/public/index.php
/var/www/osmium/application
/var/www/osmium/public/index.php
这些index.php文件中的是定义/ system /存储位置的行。我把它设置为
$system_folder = "../../system";
现在在/ var / www / system / libraries中我有一个名为MY_TestClass
的文件<?php
class MY_TestClass {
public function MY_TestClass() {
echo "this is a test of the emergency broadcast system";
}
}
从BOTH palladium.com和osmium.com内部的任何地方我都可以致电
$this->load->library('MY_TestClass');
和“这是对紧急广播系统的测试”将出现。