php / composer没有加载界面

时间:2015-03-24 00:13:25

标签: php composer-php autoload

我现在已经把头撞到了墙上一天3/4,而且无法看到我的方式错误。

我正在创建(或尝试!)一个由几个类和一个接口组成的简单包。这是在https://github.com/dnorth98/victoropsnotifier

的github

基本上,有以下目录结构:

victoropsnotifer
    src
        Signiant
            VictorOpsNotifier
                Transport.php
                VictorOpsNotifier.php

运输非常简单:

<?php
    namespace Signiant\VictorOpsNotifer;
     interface Transport
     {
          // must POST the $message to the VictorOps REST endpoint
          public function send(Messages\Message $message);
     }

并且VictorOpsNotifier的开头是

<?php
    namespace Signiant\VictorOpsNotifer;
    use GuzzleHttp\Client;

    class VictorOpsNotifer implements Transport
    {
         protected $endpoint_url;
         :
         :

当我尝试使用

实例化新对象时出现问题
<?php
    require_once 'vendor/autoload.php';

    use Signiant\VictorOpsNotifier\Messages\CustomMessage;
    use Signiant\VictorOpsNotifier\VictorOpsNotifier;

    $voConfig = ['routing_key' => 'test',
                 'endpoint_url' => 'https://goo'];

    $voHandle = new VictorOpsNotifier($voConfig);

我回来了

PHP Fatal error:  Interface 'Signiant\VictorOpsNotifer\Transport' not found in /tmp/djn/tests/vendor/signiant/
victoropsnotifier/src/Signiant/VictorOpsNotifier/VictorOpsNotifier.php on line 8
PHP Stack trace:
PHP   1. {main}() /tmp/djn/tests/test.php:0
PHP   2. spl_autoload_call() /tmp/djn/tests/test.php:12
PHP   3. Composer\Autoload\ClassLoader->loadClass() /tmp/djn/tests/test.php:0
PHP   4. Composer\Autoload\includeFile() /tmp/djn/tests/vendor/composer/ClassLoader.php:301
PHP   5. include() /tmp/djn/tests/vendor/composer/ClassLoader.php:412

我错过了EARTH的内容? Composer从我的github repo中找到了ok包,每个都在vendor文件夹中,看起来没问题。它看起来像名称空间匹配......所以出于某种原因,它只是没有加载包含接口的Transport.php文件。

2 个答案:

答案 0 :(得分:0)

class VictorOpsNotifer implements \Signiant\VictorOpsNotifer\Transport{}

尝试在界面前添加命名空间。

答案 1 :(得分:0)

这似乎只是一个错字:

namespace Signiant\VictorOpsNotifer;
                                 ^ no `i` in here

use Signiant\VictorOpsNotifier\VictorOpsNotifier;
                           ^ but here it is

与班级名称相同。

另外,您将名称空间Signiant声明为src/,但它确实src/Signiant

顺便说一句,没有必要将此包声明为psr-0,最好使用psr-4 insetad。没什么大不了的,只是为了整合。

P.S。奇怪的是,它是在抱怨界面,虽然它不应该在它上课之前,但肯定不会在出现错字时上课。

P.P.S例如,您可以通过使用适当的IDE,PHPStorm轻松避免这些拼写错误。只要有拼写错误(并且我甚至不会开始讨论自动完成),它会突出显示该类的名称缺失。