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

问题描述 投票:0回答:1

所以我有一个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} /,但/ fndxswpoi暗示/vendor/cakephp-plugins.php不会包含它们。

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

CakePHP's plugin installation manual

会导致异常,即在插件/中找不到所需的插件:

确保您的插件fluentdom / fluentdom位于{absolute project path} \ plugins \目录中并已加载

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

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

use Cake\Core\Plugin;
Plugin::load('fluentdom/fluentdom');
Plugin::load('fluentdom/selectors-phpcss');

(但是,这似乎不太合适,因为每次更新后都会自动生成并由Composer覆盖此文件。)

即便如此,最后的问题仍然存在:尽管插件似乎已成功加载(通过运行'fluentdom/fluentdom' => $baseDir . '/vendor/fluentdom/fluentdom/', 'fluentdom/selectors-phpcss' => $baseDir . '/vendor/fluentdom/selectors-phpcss/' 确认),但在尝试访问FluentDOM的类Plugin::loaded()时,我终于得到以下异常:

as described in their wiki

找不到“App \ Controller \ FluentDOM \ DOM \ Document”类

插件是否错过了自动加载?

甚至将我的控制器中的线延伸到$document = new FluentDOM\DOM\Document();,但似乎也没有帮助; Plugin::load('fluentdom/fluentdom', ['autoload' => true]);,无论如何都不需要。

那我错过了什么?

composer-php cakephp-3.0
1个回答
0
投票

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

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

according to CakePHP's doc

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

$document = new FluentDOM\DOM\Document();

因此,加载供应商包的整个行动路径仅仅是:

  1. 在powershell中运行$document = new \FluentDOM\DOM\Document();
  2. 在powershell中运行composer require fluentdom/fluentdom
  3. 立即使用composer require fluentdom/selectors-phpcss新课程

无需进一步的步骤。旁注:在使用$document = new \FluentDOM\DOM\Document();安装供应商文件后,Composer似乎刷新了自动加载配置,但是如果它没有,或者自动加载配置从之前的实验搞砸了,composer require {vendor}/{package}应该修复它。

© www.soinside.com 2019 - 2024. All rights reserved.