psr-4对工作示例的更改不起作用

时间:2015-04-27 12:41:45

标签: psr-4

我必须实现所有来源都包含在内

$instance = new \d1\d2\d3\app\MyClass();

其中d1 \ d2 \ d3 \指向根目录。

我已经阅读了基础知识 https://getcomposer.org/doc/04-schema.md#psr-4 并且 http://www.php-fig.org/psr/psr-4/https://laracasts.com/lessons/psr-4-autoloading上的示例也适用于我。

我的问题是:一旦我将代码更改为下面的代码,我的需求就会再找不到了。 (是的,我在composer.json中更改后发出命令composer update。是的,我使用自我更新更新了作曲家。)

这样可行:

composer.json

"autoload": { "psr-4": {
"Laracasts\\": "app/Laracasts" } }

的index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \Laracasts\Repositories\BlogRepository(); $test->hello();

但这不是:

composer.json

"autoload": { "psr-4": {
"d1\\": "app/Laracasts" } }

的index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \d1\Repositories\BlogRepository(); $test->hello();

我做错了什么?

我在IIS 8中使用php 5.3.28。

1 个答案:

答案 0 :(得分:0)

解决!

问题是composer.json中使用的前缀(在这种情况下为' d1')也必须用作要包含的类中的Namespace-Prefix。当我发布上一篇文章时,情况并非如此。

对于上面的非工作示例,如果' d1'

,文件必须如下所示:

应用\ Laracasts \库\ BlogRepository.php

namespace d1\Repositories; class BlogRepository { public function hello(){ echo 'hello from a non-root dir!'; } }

<强>的index.php

require_once 'vendor/autoload.php'; $test = new \d1\Repositories\BlogRepository(); $test->hello();

<强> composer.json

{ "autoload": { "psr-4": { "d1\\": "app/Laracasts" } } }

d1 \ d2 \ d3 \指向根目录的实现,我们必须调整上面提到的所有3个文件中的前缀,并将带有类的文件移动到根目录。然后我们像这样调整composer.json "d1\\d2\\d3\\": ""