Есть ли php-фреймворк для создания веб-приложения с функцией плагинов? - PullRequest
2 голосов
/ 05 сентября 2010

Я создаю веб-приложение для исследования ключевых слов. Главным образом то, что он делает, это берет ключевое слово и использует его для выполнения запросов curl, а также анализирует числа, которые затем сохраняются в таблице mysql. Запрос curl будет, например, для получения yahoo количества результатов, количества diggs для этого ключевого слова и т. Д.

Так что я подумал о том, чтобы как-то кодировать его для использования плагинов (один для Yahoo, другой для Digg и т. Д.).

Есть ли php framework, который поможет мне в этом?

Ответы [ 2 ]

2 голосов
/ 05 сентября 2010

Каркасы не справляются с такими вещами. Вам нужно закодировать его в виде подключаемого модуля.

Следующий сценарий позволит вам кодировать в виде плагина:

Допустим, у нас есть каталог с именем 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();
            }
        }
    }
}
0 голосов
/ 05 сентября 2010

PHP Fat-Free Framework уже имеет плагин Yahoo, который вы можете использовать. Хотя плагина Digg нет, его легко можно создать после плагина Yahoo. Посмотрите на код.

...