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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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} /,但/ fndxswpoi暗示/vendor/cakephp-plugins.php不会包含它们。

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

CakePHP's plugin installation manual

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

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

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

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

use CakeCorePlugin;
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 FluentDOMDOMDocument();,但似乎也没有帮助; Plugin::load('fluentdom/fluentdom', ['autoload' => true]);,无论如何都不需要。

那我错过了什么?

答案

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

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

according to CakePHP's doc

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

$document = new FluentDOMDOMDocument();

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

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

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

以上是关于CakePHP 3.5:通过Composer安装后无法访问插件类的主要内容,如果未能解决你的问题,请参考以下文章

Yii, CI, CakePHP, TP, Laravel, Symfony 等七大 PHP 框架的 Composer 安装方法

Cakephp 3.5查询 - 筛选具有相同标题的条目

json CakePHP composer.json

CakePHP 3.5 400 错误请求

CakePHP 3.5复选框数组

Cakephp 3.5 多次保存相同的记录