Web applications 是否有任何php框架可以构建具有插件功能的web应用程序?

Web applications 是否有任何php框架可以构建具有插件功能的web应用程序?,web-applications,frameworks,php,Web Applications,Frameworks,Php,我正在构建一个用于关键字研究的web应用程序。它所做的主要工作是获取一个关键字,并使用它发出curl请求,然后解析数字,然后将其存储在mysql表中。例如,curl请求将用于检索yahoo结果数、该关键字的diggs数等 所以我想用某种方式编写代码,使用插件(一个用于yahoo,另一个用于digg,等等) 有什么php框架可以帮助我做到这一点吗?框架不会处理这样的事情。您需要以插件的方式对其进行编码 以下场景将允许您以插件方式编写代码: 假设我们在站点的根目录中有一个名为plugins的目录,在

我正在构建一个用于关键字研究的web应用程序。它所做的主要工作是获取一个关键字,并使用它发出curl请求,然后解析数字,然后将其存储在mysql表中。例如,curl请求将用于检索yahoo结果数、该关键字的diggs数等

所以我想用某种方式编写代码,使用插件(一个用于yahoo,另一个用于digg,等等)


有什么php框架可以帮助我做到这一点吗?

框架不会处理这样的事情。您需要以插件的方式对其进行编码

以下场景将允许您以插件方式编写代码:

假设我们在站点的根目录中有一个名为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();
            }
        }
    }
}

已经有一个雅虎插件,你可以使用。虽然Digg插件不存在,但在Yahoo插件之后,应该很容易对其进行模式化。请看一下代码。

谢谢,我发现这个答案也很有用,但您的代码对我来说更容易理解。