CakePHP 3.5:通过Composer

时间:2018-03-01 22:27:07

标签: composer-php cakephp-3.0

所以我有一个CakePHP 3项目并想加载FluentDOM,这是一个非专门为CakePHP编写的PHP插件。 根据这两份软件文档,Composer是最佳选择。根据我的理解,我所要做的就是以下几点:

  1. 在powershell中运行composer require fluentdom/fluentdom
  2. 在powershell中运行composer require fluentdom/selectors-phpcss
    1. 将以下内容添加到项目根目录中的composer.json:
    2. "require": { "fluentdom/fluentdom": "^7.0", "fluentdom/selectors-phpcss": "^1.1" }

      1. 在powershell中运行composer update
      2. 两种方式都会按预期方式将所需的插件安装到 vendor / fluentdom / {pluginname} / ,但 /vendor/cakephp-plugins.php 将不包含它们,正如CakePHP's plugin installation manual暗示的那样。

        以下尝试通过编写

        在控制器中加载插件
        use Cake\Core\Plugin;
        Plugin::load('fluentdom/fluentdom');
        Plugin::load('fluentdom/selectors-phpcss');
        

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

          

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

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

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

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

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

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

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

          

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

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

        甚至将我的控制器中的线延伸到Plugin::load('fluentdom/fluentdom', ['autoload' => true]);,但似乎也没有帮助; as described in their wiki,无论如何都不需要。

        那么我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

    无需进一步的步骤。附注:在安装了composer require {vendor}/{package}的供应商文件后,Composer似乎刷新了自动加载配置,但是如果它没有,或者自动加载配置与之前的实验相混淆,composer dumpautoload应该修复它。