CakePHP 3.5:通过 Composer 安装后无法访问插件类



所以我有一个CakePHP 3项目,想要加载FluentDOM,一个不是专门为CakePHP编写的PHP插件。 根据这两个软件文档,Composer是要走的路。在我的理解中,我所要做的就是:

  1. 在PowerShell中运行composer require fluentdom/fluentdom
  2. 在PowerShell中运行composer require fluentdom/selectors-phpcss

  1. 将以下内容添加到项目根目录中的 composer.json:

"require": { "fluentdom/fluentdom": "^7.0", "fluentdom/selectors-phpcss": "^1.1" }

  1. 在PowerShell中运行composer update

这两种方式都会按照预期将所需的插件安装到 vendor/fluentdom/{pluginname}/中,但/vendor/cakephp-plugins.php不会包含它们,正如 CakePHP 的插件安装手册所暗示的那样。

以下尝试通过编写在控制器中加载任一插件

use CakeCorePlugin;
Plugin::load('fluentdom/fluentdom');
Plugin::load('fluentdom/selectors-phpcss');

将导致在插件中找不到所需插件的异常/

确保您的插件 fluentdom

/fluentdom 位于 {绝对项目路径}\plugins\ 目录中并已加载

-这已经很奇怪了,因为Composer一开始就不会在那里安装任何东西。

我发现我可以通过手动扩展供应商/cakephp-plugins来解决这个问题.php以包含正确的路径:

'fluentdom/fluentdom' => $baseDir . '/vendor/fluentdom/fluentdom/',
'fluentdom/selectors-phpcss' => $baseDir . '/vendor/fluentdom/selectors-phpcss/'

(但是,这似乎不是要走的路,因为此文件在每次更新后都会自动生成并由 Composer 覆盖。

即便如此,最后一个问题仍然存在:尽管插件似乎已成功加载(通过运行Plugin::loaded()确认),但在尝试访问 FluentDOM 的类时,我最终会得到以下异常,如他们的 wiki 中所述:

$document = new FluentDOMDOMDocument();

找不到类 'App\Controller\FluentDOM\DOM\Document'

插件是否错过了执行其自动加载的机会?

甚至将我的控制器中的行扩展到Plugin::load('fluentdom/fluentdom', ['autoload' => true]);,但似乎也无济于事;根据 CakePHP 的文档,无论如何这都不是必需的。

那么我错过了什么?

找到了!首先,我有一个错误的假设,即插件和供应商包或多或少是相同的:它们不是;感谢格雷格施密特在问题的评论中指出这一点。

问题在于我如何尝试访问FluentDOM的课程。而

$document = new FluentDOMDOMDocument();

在独立的 php 文件中工作,它不在 Cake 项目中;我缺少一个反斜杠:

$document = new FluentDOMDOMDocument();

因此,加载供应商包的整个操作路径仅为:

  1. 在PowerShell中运行composer require fluentdom/fluentdom
  2. 在PowerShell中运行composer require fluentdom/selectors-phpcss
  3. 通过$document = new FluentDOMDOMDocument();立即使用新课程

无需进一步的步骤。旁注:Composer 似乎在使用composer require {vendor}/{package}安装供应商文件后刷新自动加载配置,但如果没有,或者自动加载配置从早期的实验中搞砸了,composer dumpautoload应该修复它。

相关内容

  • 没有找到相关文章

最新更新