我正在尝试自动加载我的课程。我使用文件Foo.php和文件Bar.php创建了一个文件夹app / Classes。
在composer.json中,我有引用的文件夹
"autoload": {
"classmap": [
"database",
"app/Classes/"
],
"psr-4": {
"App\\": "app/"
},
"files": ["app/Library/myFunctions.php"]
},
按照
进行操作composer dump-autoload
已验证vandor / autoload / autoload_classmap.php同时具有
'Bar' => $baseDir . '/app/Classes/Bar.php',
'Foo' => $baseDir . '/app/Classes/Foo.php',
我在每个类中放了一个简单的函数,如:
<?php
class Bar {
public function __construct(){
echo 'Bar';
}
}
?>
然后我尝试引用它
new Bar;
并收到错误
FatalErrorException in LoginController.php line 24:
Class 'App\Http\Controllers\Login\Bar' not found
现在......解决我提出的错误
new \Bar;
我们很好。
我的代码中是否有某些原因需要'\'。我在文档中找不到这个修复程序,我只是在laracasts中注意到它并且在挫折中添加它,并且它有效。
答案 0 :(得分:0)
这是一个命名空间问题。看起来将"app/Classes/"
设置为类映射会将其中的类设置为根命名空间中的类。所以Foo和Bar都在根。您的控制器似乎位于此命名空间中:App\Http\Controllers\Login
。除非另外将特定的类名称视为相对于当前命名空间,因此只使用Foo使其查找类App\Http\Controllers\Login\Foo
。,其中在前面放置斜杠使其保持相对并直接到根(想想)文件夹或网址)。
如果你想要它更整洁,你可以将use Foo;
放在命名空间行下方的顶部,如果有的话,可以放在其他任何地方。