【问题标题】:FuelPHP to WordPressFuelPHP 到 WordPress
【发布时间】:2015-10-09 06:30:01
【问题描述】:

我们的任务是集成 FuelPHP 以在 WordPress 网站中运行,以获得这两个为开发人员提供的优势。我们一直在互联网上寻找如何做到这一点的方法,我们来到this site

我们按照所有说明进行操作,是的,它成功安装了wordpress,但未能与FuelPHP集成,当我们尝试打开fuelphp时,它返回错误:

致命错误:无法重新声明类 Fuel\Core\Autoloader C:\xampp\htdocs\game-bootcamp\fuel\core\classes\autoloader.php 上线 24.

有人成功做到了吗?你能告诉我们怎么做吗?

【问题讨论】:

    标签: wordpress model-view-controller integration fuelphp


    【解决方案1】:

    对不起,我回答了一个老问题,但是互联网上的任何地方都没有回答。这是一个重要的问题,因为 Wordpress 对最终用户有好处,而 Fuel PHP 速度非常快,对程序员也有好处。

    您可以通过两种方式集成 Wordpress 和 Fuel PHP。

    1. Wordpress 在 Fuel PHP 中运行
    2. 让 PHP 在 Wordpress 中运行

    第一种方式

    我敢打赌,您要求的是第二个,但是您发布了第一个教程的链接。我只能给你第二个答案。

    通常,第一种方法可能会很痛苦,但是这里有一些提示可以帮助您入门。 Wordpress Codex - Integrating Wordpress with Your Website

    通过这种方式,您可以使用 Wordpress 主题覆盖并输出任何内容,并让 Fuel Request 使用 Wordpress 查询功能带头。如果您想要 Wordpress 面板和 Fuel PHP 显示,这似乎是一种很好的集成方式,我认为这根本不是一个好主意,但如果您愿意,那就去吧。

    第二种方式

    我想实现基于 Fuel PHP 和 Wordpress 网站的后台面板,其数据取自该后台面板并在 Wordpress 代码中使用 Fuel PHP 类。

    这样,您应该保留 Wordpress 应用程序路由,并利用 Fuel PHP 的 HMVC 模式。

    我找到了这个,它给了我如何制作这个的总体思路: https://github.com/robertosobachi/wp-fuel-framework

    第 1 步 - Wordpress 基础知识

    不要修改 Wordpress 核心。不要修改 Wordpress 主题。创建您自己的子主题或您自己的主题。如果你想让一切都变得正确 - 你应该为此创建 Wordpress 插件。

    然后您可以将 Fuel PHP 集成到 functions.php 文件中,但是最好的方法是使用侧边栏(小部件)区域创建自己的主题并创建插件,该插件将使用主题定义的侧边栏、定义的 PHP 函数或/和简码。

    在您的主题/插件代码中,您需要加载 Fuel PHP。您可以在 Widget Init 操作中执行此操作,但您可以选择在何处准确加载。

    以下代码适用于 Fuel PHP 1.8,但您可以按照此步骤使用更多版本。

    步骤 #2 - 燃料 index.php 复制

    让我们假设以下文件夹结构:

    /apache/www/backoffice/(带有燃料和公用文件夹)

    /apache/www/wordpress/(使用 wordpress)

    打开 /apache/www/backoffice/public/index.php 看看那里发生了什么。首先要做的是在 Wordpress 中复制 Fuel 正在执行的步骤。我粘贴的每个代码都应该放在你的 Wordpress 插件或主题中(如你所愿)。 ABSPATH 由 Wordpress 定义。

    $dir = realpath(ABSPATH.'../backoffice/public');
    define('DOCROOT', $dir.DIRECTORY_SEPARATOR);
    define('APPPATH', realpath($dir.'/../fuel/app/').DIRECTORY_SEPARATOR);
    define('PKGPATH', realpath($dir.'/../fuel/packages/').DIRECTORY_SEPARATOR);
    define('COREPATH', realpath($dir.'/../fuel/core/').DIRECTORY_SEPARATOR);
    

    现在你可以复制 Fuel index.php 的其余部分了:

    defined('FUEL_START_TIME') or define('FUEL_START_TIME', microtime(true));
    defined('FUEL_START_MEM') or define('FUEL_START_MEM', memory_get_usage());
    
    // Load in the Fuel autoloader
    if ( ! file_exists(COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php'))
    {
        die('No composer autoloader found. Please run composer to install the FuelPHP framework dependencies first!');
    }
    
    // Activate the framework class autoloader
    require COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
    class_alias('Fuel\\Core\\Autoloader', 'Autoloader');
    

    index.php 的其余代码基于 Request 类,我们现在不想使用,所以不要复制它。但是你可以看到这条线:

    require APPPATH.'bootstrap.php';
    

    让我们转到那个文件。在第一行里面你可以找到:

    require COREPATH.'bootstrap.php';
    

    所以让我们先从这个开始。

    步骤 #3 - CORE bootstrap.php 复制

    已保存,可能需要复制此文件的第一行。

    define('DS', DIRECTORY_SEPARATOR);
    define('CRLF', chr(13).chr(10));
    
    define('MBSTRING', function_exists('mb_get_info'));
    
    require COREPATH.'base.php';
    
    setup_autoloader();
    
    get_composer();
    

    请勿复制 register_shutdown_functionset_exception_handlerset_error_handler,除非您知道自己在做什么。您可能想使用默认的 Wordpress 错误处理。使用燃料错误处理非常棘手,但如果你愿意 - 试试吧。我个人放弃了。

    您必须复制 setup_autoloaderget_composer 函数。它们很长,但它们对于使这种集成起作用至关重要。我没有在这里复制它以使这篇文章更具可读性。

    步骤#4 - APP bootstrap.php 复制

    希望你还没有迷路。我们必须回到APP bootstrap.php 并复制这行。

    \Autoloader::add_classes(array(
        // Add classes you want to override here
        // Example: 'View' => APPPATH.'classes/view.php',
    ));
    
    \Autoloader::register();
    
    \Fuel::$env = \Arr::get($_SERVER, 'FUEL_ENV', \Arr::get($_ENV, 'FUEL_ENV', \Fuel::DEVELOPMENT));
    
    \Fuel::init('config.php');
    

    我不确定 Fuel::init 是否对加载如此重要,还没有测试过。但是您必须知道 Fuel::init 方法正在设置一些全局变量,例如 date_default_timezone_set(根据配置),因此它可以以某种方式修改 Wordpress 的工作方式。

    所以,就是这样。现在在您的插件/主题文件中,您可以向控制器发出 HMVC 请求。你可以访问你的模型、燃料类——就像你以前做的那样。不要忘记在 Wordpress 中激活您的插件。

    $widget = Request::forge('widget/sample')->execute();
    

    您必须注意它不会自动回显视图 - 请参阅 Fuel 文档了解更多信息。

    这里是粘贴箱:link

    编辑:

    我发现使用会话的另一个棘手部分是:当您仅使用 HMVC 请求时,会话不会保存,因此您必须在代码中手动调用 Session::write()(无论您想保存它的位置)。您必须在 Wordpress 输出之前调用它,因此请尝试连接到 init 或将其放在您的主插件文件中。

    编辑 #2:

    Wordpress 自动“magic_quotes_gpc”功能还有另一个棘手的部分。 不要简单地通过 $_POST = stripslashes_deep($_POST); 将其关闭,因为它可能会破坏 Wordpress 的安全性。更好的方法是在添加到 Fuel 代码中的数据库之前删除斜线,并且只删除需要删除的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多