PHP命名空间:为什么找不到我的课程?

时间:2015-08-17 09:53:19

标签: php laravel composer-php

我已经阅读了一些关于PHP中命名空间的内容以及compser如何处理名称空间的自动加载。我无法弄清楚为什么我的班级无法找到。有人可以帮忙吗?

我正在使用Laravel,以下是相关内容:

composer.json相关内容:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/libraries"
    ],
    "psr-0": {
        "Facebook\\":"vendor/facebook/php-sdk-v4/src/"
    }
}

执行composer dump-autoload会在vendor/composer/autoload_namespaces.php中为我提供以下内容:

'Facebook\\' => array($vendorDir . '/facebook/php-sdk-v4/src'),

我的供应商文件夹结构:Facebook是:

vendor
   |__ facebook
         |__ php-sdk-v4
                  |__ src
                       |__ Facebook
                              |__ ..
                              |__ Facebook.php
                              |__ ..

尝试$facebook = new Facebook($config)给我

  

Symfony \ Component \ Debug \ Exception \ FatalErrorException(E_UNKNOWN)   未找到“Facebook”类

我做错了什么?!

2 个答案:

答案 0 :(得分:2)

应该自动加载vendor文件夹中的任何内容,因此没有必要使用这些行

"psr-0": {
    "Facebook\\":"vendor/facebook/php-sdk-v4/src/"
}

您是否已将这些行添加到composer.json并以通常的作曲方式安装库?

"require": {
    "facebook/php-sdk-v4": "~5.0"
}

答案 1 :(得分:1)

Facebook是该类的名称,但$facebook = new \Facebook\Facebook($config); 似乎也是您的命名空间的名称。

在这种情况下,你可以这样实例:

operator ~