我必须实现所有来源都包含在内
$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。
答案 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\\": ""