我们的任务是集成fuelPHP,在WordPress网站上运行,以获得这两个提供给开发人员的优势。我们一直在互联网上寻找如何做到这一点的方法,于是我们来到了本站。
我们遵循所有的说明,是的,它成功地安装了wordpress,但是未能与FuelPHP集成,当我们试图打开fuelphp时,它返回了一个错误:
致命错误:无法在第24行的C:\xampp\htdocs\game-bootcamp\fuel\core\classes\autoloader.php中重新声明类燃料\Core\Autoloader。
那里有成功的人吗?你能告诉我们怎么做吗?
发布于 2016-04-29 09:25:29
请原谅我回答了一个老问题,但是网上的任何地方都没有回答这个问题。这是一个很重要的问题,因为Wordpress对最终用户有好处,而PHP燃料非常快&对程序员来说很好。
您可以通过两种方式集成Wordpress和燃料PHP。
first way
我敢打赌,你要求的第二个,但你张贴了第一个教程的链接。我只能给你第二个答案。
一般来说,第一种方式可能是痛苦的,但是这里有一些提示可以让你开始。Wordpress代码库-将Wordpress与您的网站集成
通过这种方式,您可以使用Wordpress主题进行重写,输出任何内容,并使用Wordpress查询函数让燃料请求起带头作用。这似乎是一个很好的集成方式,如果你想要Wordpress面板和燃料PHP显示,我不认为这是一个好主意,但如果你想-去吧。
第二条路
我想实现基于燃油PHP和Wordpress网站的后台面板的数据,从这个后台面板与燃油PHP类在Wordpress代码。
这样,您应该保留Wordpress应用程序的路由,并利用HMVC模式的燃料PHP。
我找到了这个,它给了我一个整体的想法,如何制作这个:https://github.com/robertosobachi/wp-fuel-framework
步骤#1 - Wordpress基础
不要修改Wordpress核心。不要修改Wordpress主题。要么创建自己的子主题,要么创建自己的主题。如果你想把一切都做好--你应该为此创建Wordpress插件。
然后,您可以将燃料PHP集成到functions.php文件中,但是最好的方法是使用Sidebar (Widget)区域创建自己的主题,并创建插件,该插件将使用主题定义的侧栏、定义的PHP函数或/和短代码。
在您的主题/插件代码中,您需要加载燃料PHP。您可以在Widget操作上使用它,但是这是您的选择,可以在哪里准确地加载它。
下面的代码是燃料PHP 1.8的代码,但是您可能会按照以下步骤提供更多的版本。
步骤2-燃料index.php复制
让我们假设以下文件夹结构:
/apache/www/backoffice/ (附有燃料和公用文件夹)
/apache/www/wordpress/ (带wordpress)
打开/apache/www/backoffice/public/index.php,看看那里发生了什么。第一件事是复制燃料正在做的步骤,但在Wordpress内。我粘贴的每一段代码都应该放在你的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);现在,您可以复制燃料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代码基于我们现在不想使用的请求类,所以不要复制它。但是,您可以看到这一行:
require APPPATH.'bootstrap.php';我们去看那个文件吧。在第一行中,您可以找到:
require COREPATH.'bootstrap.php';让我们先从这个开始。
步骤#3 -核心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_function、set_exception_handler、set_error_handler,除非您知道自己在做什么。您可能希望使用默认的Wordpress错误处理。使用燃料错误处理是非常棘手的,然而,如果你想-尝试它。就我个人而言我放弃了。
--您必须复制、setup_autoloader和get_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');我不确定燃料是否::init是如此重要的装载,还没有测试过它。但是,您必须知道燃料::init方法正在设置一些全局变量,比如date_default_timezone_set (根据配置),这样它就可以以某种方式修改Wordpress的工作方式。
所以,就是这样。现在,在您的插件/主题文件中,您可以向控制器发出HMVC请求。你可以访问你的模型,燃料类-就像你过去做的那样。不要忘记激活你的插件在Wordpress。
$widget = Request::forge('widget/sample')->execute();您必须意识到,它不是自动回显视图--有关更多信息,请参阅燃料文档。
这是巴斯泰宾:链接
编辑:
我发现使用会话还有一个棘手的部分:当您只使用HMVC请求时,会话没有保存,因此您必须在代码中手动调用Session::write() (无论您想要保存它的地方)。在生成Wordpress输出之前,您将不得不调用它,所以尝试将其挂钩到init,或者将其放到您的主插件文件中。
编辑#2:
还有另一个棘手的部分与Wordpress汽车"magic_quotes_gpc“功能。并不是简单地通过$_POST = stripslashes_deep($_POST);关闭它,因为它可能破坏Wordpress的安全性。更好的方法是在添加到您的燃料代码中的数据库之前直接去掉斜杠,并且只删除那些需要删除的变量。
https://stackoverflow.com/questions/31511332
复制相似问题