2017-03-10 59 views
-1

这里面是我的文件夹结构PHP:作曲家自动加载不与多个目录工作src文件夹

enter image description here

在我 package/index.php这个样子的

require_once 'vendor/autoload.php'; 

use HelloWorld\SayHello; 

use Test\First; 

//works fine 
SayHello::world(); 

//returns classnot found error 
First::sayTest(); 

在我composer.json”我

包括以下内容。

"autoload": { 
    "psr-0": { 
     "HelloWorld": "src/" 
    } 
} 

但我得到了以下错误First::sayTest()线

Fatal error: Uncaught Error: Class 'Test\First' not found

但类First.phpsrc\Test文件夹下存在。

namespace Test; 
class First 
{ 
    public static function sayTest() 
    { 
     echo 'test'; 
    } 
} 

回答

-1

变化composer.json阅读:

"autoload": { 
    "psr-4": { 
     "": "src/" 
    } 
} 

然后运行composer dump-autoload再生vendor/autoload.php

阅读更多关于的autoload栏目。

+0

其工作感谢:) – Jabaa

+1

这实际上是不好的建议,因为你的自动加载声明所有的类可能在'src'中找到,这对大多数人来说都不是这样。您可以根据需要添加尽可能多的名称空间前缀和目录,任何比'“”'长的东西都更适合您的解决方案。 – Sven

0

您的composer.json包含一些条目,这使得它加载HelloWorld,但文件夹“Test”没有这样的条目。

也许这将有助于将您的First.php复制到HelloWorld文件夹并在package.index.php中更改您的引用。

+0

恰尼如何使composer.json – Jabaa

+0

为'Test'文件夹中的条目看到axiac的答案,看起来不错。 –

1

您只声明一个前缀位于src中。再加一条:

"autoload": { 
    "psr-0": { 
     "HelloWorld": "src/", 
     "Test": "src/" 
    } 
} 

另外请注意,当您使用的命名空间,PSR-4更适合:

"autoload": { 
    "psr-4": { 
     "HelloWorld\\": "src/HelloWorld/", 
     "Test\\": "src/Test" 
    } 
}