Каркасы не справляются с такими вещами. Вам нужно закодировать его в виде подключаемого модуля.
Следующий сценарий позволит вам кодировать в виде плагина:
Допустим, у нас есть каталог с именем plugins в корне сайта и таблица в базе данных с именем plugins со следующей структурой (id, name, enabled, path)
Теперь вам нужно создать интерфейс для ваших плагинов. Таким образом, все плагины будут иметь одинаковую базовую структуру.
/**
* 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')
И, наконец, вам нужен некий контроллер, который загружает все включенные плагины из базы данных (путь get), создает объекты и выполняет их. Вот так
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();
}
}
}
}