CakePHP 3.5:通过Composer安装后无法访问插件类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CakePHP 3.5:通过Composer安装后无法访问插件类相关的知识,希望对你有一定的参考价值。
所以我有一个Cakephp 3项目并且想要加载FluentDOM,这是一个非专门为CakePHP编写的PHP插件。根据这两份软件文档,Composer是最佳选择。根据我的理解,我所要做的就是以下几点:
- 在powershell中运行
composer require fluentdom/fluentdom
- 在powershell中运行
composer require fluentdom/selectors-phpcss
要么
- 将以下内容添加到项目根目录中的composer.json:
"require": {
"fluentdom/fluentdom": "^7.0",
"fluentdom/selectors-phpcss": "^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()
时,我终于得到以下异常:
找不到“App Controller FluentDOM DOM Document”类
插件是否错过了自动加载?
甚至将我的控制器中的线延伸到$document = new FluentDOMDOMDocument();
,但似乎也没有帮助; Plugin::load('fluentdom/fluentdom', ['autoload' => true]);
,无论如何都不需要。
那我错过了什么?
找到了!首先,我有一个错误的假设,即插件和供应商包装或多或少相同:它们不是;感谢格雷格施密特在问题的评论中指出这一点。
问题在于我如何尝试访问FluentDOM的课程。而
在一个独立的php文件中工作,它不在Cake项目中;我错过了一个反斜杠:
$document = new FluentDOMDOMDocument();
因此,加载供应商包的整个行动路径仅仅是:
- 在powershell中运行
$document = new FluentDOMDOMDocument();
- 在powershell中运行
composer require fluentdom/fluentdom
- 立即使用
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 安装方法