Composer autoload找不到类

时间:2017-08-04 16:54:09

标签: php composer-php autoload

我正在尝试创建一个MVC结构并使用composer来自动加载所有内容 但我一直收到这个错误:

  

致命错误:未捕获错误:第5行的C:\ wamp64 \ www \ activity \ Public \ index.php中找不到类'App \ Init'

|MainFolder  
    |App  
    |Public  
    |Vendor  
        |ACT  
        |composer  
        |autoload.php  
    |composer.json  

composer.json:

{
    "name": "vendor/activity",
    "description": "descrip",

    "require": {
        "php": ">=5.6.25"
    },

    "authors":[
        {
            "name": "John Doe",
            "email": "johndoe@gmail.com"
        }
    ],

    "autoload":{
        "psr-4": {
            "ACT\\": "vendor/",
            "App\\": "/"
        }
    },
    "config":{
        "bin-dir": "bin"
    }
}

应用\的init.php

<?php    
namespace App;

class Init
{
    public function __construct()
    {
        echo "Loaded!!";
    }
}

公共\的index.php

<?php
require_once '../vendor/autoload.php';

$init = new \App\Init;  

\卖方\作曲家\ autoload_namespaces.php

<?php    

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    "ACT" => array($vendorDir . false),
    "App" => array($baseDir . '/'),
);  

Obs:已经composer dump-autoload

1 个答案:

答案 0 :(得分:3)

  1. 请勿手动将内容放入/vendor
  2. 虽然坚持#1,但不要在/vendor中引用autoload,这些软件包应该都有自己的全功能自动加载器,作曲家会找到并使用它们。
  3. 您需要在自动加载中指定更多路径。
  4. "autoload":{
        "psr-4": {
            "App\\": "App/"
        }
    },
    

    想想它就像告诉作曲家“在下面的文件夹中查找以名称空间foo\bar\开头的内容”。

    注意:文件夹名称不必与命名空间匹配。

    例如:遵循建议的PSR / Composer Vendor\Package\方案

    {
      "autoload": {
        "psr-4": {
          "sammitch\\meatstacker\\": "src/"
        }
      }
    }
    

    然后:

    • \sammitch\meatstacker\Client映射到src/Client.php
    • \sammitch\meatstacker\Bread\Rye映射到src/Bread/Rye.php