Laravel PSR-0自动加载



我正在使用盒子出现的标准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 ViewsMyView;
       return $view->Build();
    }   
}

它说" class"视图 xview'找不到。

我已经使用PSR-0进行了Composer Auto-load,但是现在我想添加控制器并查看而无需重新运行作曲家,我相信PSR-0可以允许我这样做(如果我运行作曲家,它起作用btw)。

您基本上不是在尝试使用它的同时使用PSR-0 ...

如果您告诉作曲家您有:

"psr-0": {
    "CARS": "app/"
}

它将拼命寻找

中的文件
app/CARS/*.php

,并且还会理解其上的所有文件均在CARS名称空间下:

所以,您的班级必须在:

/whatever/application/app/CARS/Views/MyView.php

,必须将其声明为

<?php namespace CARSViews;
class MyView {
    public function Build()
    {
        return "Great !";
    }
}

您需要将其包装到汽车名称空间

当我审查了作曲家版本1.8.6时,我也有相同的问题,我转介给文档

在PSR-0键下,您相对于包根的root定义了从名称空间到路径的映射。请注意,这也支持梨式的非命名限制。

NOTE NAMESPACE声明应以结束,以确保自动加载器响应

{
   "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/"
 },

希望这对某人有帮助

相关内容

  • 没有找到相关文章

最新更新