我正在使用框中出现的标准laravel目录结构。我把它添加到composer.json
"autoload": {
"classmap": [
"app/commands",
....
],
**"psr-0": {
"CARS": "app/"
}**
},
我有一个视图
<?php namespace Views;
class MyView {
public function Build()
{
return "Great !";
}
}
?>
和控制器
class MyController extends \BaseController {
public function loadHome() {
$view = new \Views\MyView;
return $view->Build();
}
}
它说找不到类'Views \ XView'。
我已经使用PSR-0运行了一次composer自动加载,但现在我想添加Controllers和View而不重新运行作曲家,我相信PSR-0允许我这样做(如果我运行作曲家,它的作品顺便说一下。
答案 0 :(得分:4)
在尝试使用时,你基本上没有使用PSR-0
......
如果你告诉Composer你有:
"psr-0": {
"CARS": "app/"
}
中的文件会非常拼命
app/CARS/*.php
并且还将理解其上的所有文件都在CARS
命名空间下:
所以,你的班级必须在:
/whatever/application/app/CARS/Views/MyView.php
必须声明为
<?php namespace CARS\Views;
class MyView {
public function Build()
{
return "Great !";
}
}
答案 1 :(得分:1)
当我查看作曲家的版本1.8.6
时,遇到的问题与我提到的Docs
在psr-0键下,定义相对于包根目录的从名称空间到路径的映射。请注意,这也支持PEAR样式的非命名间隔约定。
注意,名称空间声明应以\结尾,以确保自动加载器准确响应
{
"autoload": {
"psr-0": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "src/",
"Vendor_Namespace_": "src/"
}
}
}
这就是我感兴趣的地方,PSR-0样式不仅限于名称空间声明,还可以在类级别下指定。这对于在全局名称空间中只有一个类的库很有用。例如,如果php源文件也位于包的根目录中,则可以这样声明:
{
"autoload": {
"psr-0": { "UniqueGlobalClass": "" }
}
}
注意 例如,您需要声明其完整路径
文件结构为
/myProject
-/app
--/Acme
---/Repositories
----/MyClass
所以我的作曲家psr-0看起来像
"psr-0": {
"Acme": "app/Acme/"
},
希望这对某人有帮助
答案 2 :(得分:0)
您需要将其包装到CARS命名空间配合
中