首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel psr-0自动加载

Laravel psr-0自动加载
EN

Stack Overflow用户
提问于 2014-01-24 06:36:15
回答 3查看 3.3K关注 0票数 1

我使用的是开箱即用的标准laravel目录结构。我已将此代码添加到composer.json

代码语言:javascript
复制
"autoload": {
    "classmap": [
        "app/commands",
          ....
    ],
      **"psr-0": {
        "CARS": "app/"
        }**
},

我看到了风景

代码语言:javascript
复制
<?php namespace Views;
class MyView {

    public function Build()
    {
        return "Great !";
    }
}
?>

和一个控制器

代码语言:javascript
复制
class MyController extends \BaseController {
    public function loadHome() {
       $view = new \Views\MyView;
       return $view->Build();
    }   
}

它显示找不到类'Views\XView‘。

我已经用PSR-0运行了一次composer自动加载,但现在我想添加控制器和视图,而不需要重新运行composer,我相信PSR-0允许我这样做(如果我运行composer,它可以工作)。

EN

回答 3

Stack Overflow用户

发布于 2014-01-24 09:17:42

你基本上没有在使用PSR-0,而是试图使用它...

如果你告诉Composer你有:

代码语言:javascript
复制
"psr-0": {
    "CARS": "app/"
}

它将不顾一切地寻找

代码语言:javascript
复制
app/CARS/*.php

并且还将理解它上的所有文件都在CARS名称空间下:

所以,你的类必须在:

代码语言:javascript
复制
/whatever/application/app/CARS/Views/MyView.php

,并且必须声明为

代码语言:javascript
复制
<?php namespace CARS\Views;

class MyView {

    public function Build()
    {
        return "Great !";
    }

}
票数 5
EN

Stack Overflow用户

发布于 2014-01-24 06:44:47

您需要将其封装到CARS命名空间伙伴中

票数 0
EN

Stack Overflow用户

发布于 2019-08-12 05:30:45

当我回顾composer版本1.8.6时,我也遇到了同样的问题,我提到了Docs

在psr-0键下,您可以定义一个从名称空间到路径的映射,相对于包根目录。请注意,这也支持PEAR样式的非命名空间约定。

注意:命名空间声明应以\结尾,以确保自动加载器准确响应

代码语言:javascript
复制
{
   "autoload": {
       "psr-0": {
         "Monolog\\": "src/",
         "Vendor\\Namespace\\": "src/",
         "Vendor_Namespace_": "src/"
       }
    }
}

这就是我感兴趣的地方,PSR-0样式不仅限于名称空间声明,还可以直接指定到类级别。这对于在全局命名空间中只有一个类的库很有用。例如,如果php源文件也位于包的根目录中,则可以这样声明它:

代码语言:javascript
复制
{
    "autoload": {
        "psr-0": { "UniqueGlobalClass": "" }
    }
} 

注意:您需要声明它的完整路径,例如

文件结构为

代码语言:javascript
复制
/myProject
   -/app
   --/Acme
   ---/Repositories
   ----/MyClass

所以我的作曲家psr-0看起来像

代码语言:javascript
复制
"psr-0": {
    "Acme": "app/Acme/"
 },

希望这能帮助到某人

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21320775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档