框架不处理这样的事情。你需要用插件的方式编码。
以下场景将允许您以插件方式编写代码:
假设我们在站点的根目录中有一个名为 plugins 的目录,并在数据库中有一个名为 plugins 的表,其结构如下(id、名称、启用、路径)
现在您需要为您的插件创建一个接口。这样所有插件都将具有相同的基本结构。
/**
* FILE: /plugins/PluginInterface.php
*
* Sample Interface
*/
interface iPlugin{
/**
* Tests if plug-in can be executed
*/
function test();
/**
* Prepared plug-in for execution
*/
function prepare();
/**
* Executes plug-in logic and returns count of somethings
*/
function execute();
}
/**
* FILE: /plugins/PluginExample.php
*
* Sample Plug-in
*/
class PluginExample implements iPlugin{
public function execute() {
}
public function prepare() {
}
public function test() {
}
}
现在您需要在数据库中为 PluginExample 插入一条记录。
INSERT INTO plugins (id, name, enabled, path) VALUES (1, 'Example', 1, 'PluginExample.php')
最后,您需要某种控制器来从数据库(获取路径)加载所有启用的插件并创建对象并执行它们。像这样
function loadAndExecutePlugins() {
$query = "select * from plugins where enabled = 1";
$plugins = 'array of objects from query 1';
if ($plugins) {
foreach ($plugins as $plugin) {
//
$class = $plug->path;
include_once "/plugins/$class";
// Class is using interface, so you know what methods to call
$plug = new $class();
if ($plug->test()) {
$plug->execute();
}
}
}
}