我使用的是开箱即用的标准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自动加载,但现在我想添加控制器和视图,而不需要重新运行composer,我相信PSR-0允许我这样做(如果我运行composer,它可以工作)。
发布于 2014-01-24 09:17:42
你基本上没有在使用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 !";
}
}发布于 2014-01-24 06:44:47
您需要将其封装到CARS命名空间伙伴中
发布于 2019-08-12 05:30:45
当我回顾composer版本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/"
},希望这能帮助到某人
https://stackoverflow.com/questions/21320775
复制相似问题