psr-0 与作曲家自动加载不工作,但它与 psr-4 自动加载完美配合

     2023-03-14     226

关键词:

【中文标题】psr-0 与作曲家自动加载不工作,但它与 psr-4 自动加载完美配合【英文标题】:psr-0 autoloading with composer not wotking, but it works perfectly with psr-4 autoloading 【发布时间】:2016-10-31 16:42:50 【问题描述】:

我尝试使用 PSR-0 自动加载文件,但它不会自动加载该文件。我尝试使用 PSR-4 自动加载相同的文件。使用 PSR-4,它可以完美运行。 PSR-0 所需的文件夹结构有什么不同吗?

即使保留What is the difference between PSR-0 and PSR-4? 中提到的文件夹结构,我也无法使 PSR-0 工作

这是我的文件夹结构。

Test
    --Package
        --Test.php

我在Test.php:

<?php
namespace Test\Package;

class Test

    public function __construct()
    
        echo "In Test class";
    

composer.json 看起来像


  "autoload": 

    "psr-0": 
            "Test\\Package\\": "Test/Package/"
             
  

【问题讨论】:

What is the difference between PSR-0 and PSR-4?的可能重复 @Wazelin 但是即使保留***.com/questions/24868586/… 中提到的文件夹结构,我也无法使 PSR-0 工作,这是我的结构测试 --Package --Test.php Test.php // ////////////////////////////////////////// 正如您所描述的,它们应该可以工作。你的实际类名和文件夹结构是什么? 那是我在描述中指定的:) @jwriteclub 测试文件夹外@jwriteclub 【参考方案1】:

与直觉相反,the composer documentation on PSR-0 包含一个部分路径,这使得 PSR-0 似乎需要一个包的路径才能加载类。实际上,PSR-0 是根据包构建路径,因此它只需要指定路径,如果代码位于像 src/lib/ 这样的文件夹中,不是命名空间的一部分小路。如果基于命名空间的目录结构与composer.json 在同一目录中开始,则不需要路径。

假设问题中指定了一个目录结构,有几种方法可以使用 composer 加载这个类。

PSR-0


  "autoload": 
    "psr-0":  "Test\\Package\\": "" 
  

请注意,即使代码位于 Test/Package/ 中,此文件夹在 PSR-0 中指定。

PSR-4

对于 PSR-4 自动加载,包源的路径必须出现在 composer.json 文件中。


  "autoload": 
    "psr-4":  "Test\\Package\\": "Test/Package/" 
  

类图

当需要加载未组织到典型命名空间文件夹树中的类时,也可以使用 classmap 数组简单地指定要在其中搜索类的文件夹列表。


  "autoload": 
    "classmap": [ "Test/Package/" ]
  

不过,一般而言,使用 PSR-0 或 PSR-4 会提供更轻松的体验,因为 classmap 方法需要单独指定每个文件夹。

【讨论】:

作曲家自动加载器 psr-0 命名空间

】作曲家自动加载器psr-0命名空间【英文标题】:composerautoloaderpsr-0namespaces【发布时间】:2013-08-1108:21:39【问题描述】:我已经创建了一个自定义作曲家包,但我无法为其设置正确的自动加载选项。我所有的课程都在MyNamespace/Comm... 查看详情

psr规范

...括以下几个规范:PSR-0(弃用)PSR-1PSR-2PSR-3PSR-4 1.PSR-0自动加载规范,此规范已被启用-本规范已于2014年10月21日被标记为弃用,目前新的替代规范为【PSR-4】本文是为自动加载器实现通用自动加载所需要遵循的编码规范 一... 查看详情

psr规范

...括以下几个规范:PSR-0(弃用)PSR-1PSR-2PSR-3PSR-4 1.PSR-0自动加载规范,此规范已被启用-本规范已于2014年10月21日被标记为弃用,目前新的替代规范为【PSR-4】本文是为自动加载器实现通用自动加载所需要遵循的编码规范 一... 查看详情

使用命名空间自动加载 Composer 和 PSR-0 类

】使用命名空间自动加载Composer和PSR-0类【英文标题】:ComposerandPSR-0classautoloadingwithnamespaces【发布时间】:2013-11-3016:53:18【问题描述】:大家好,我在使用composer自动加载我的课程时遇到问题。在Linux上一切正常,但现在我的老板... 查看详情

psr规范发展历程(代码片段)

====================PSR-0(自动加载规范)=======================PSR-0(AutoloadingStandard)类自动加载规范,该规范现已废弃(Deprecated),它将由PSR-4替代。1.一个完全合格的命名空间和类名必须遵循以下结构"VendorNameNamespaceClassName"2.每个命名空... 查看详情

作曲家更新错误不符合 psr-4 自动加载标准。跳过

】作曲家更新错误不符合psr-4自动加载标准。跳过【英文标题】:Errorwithcomposerupdatedoesnotcomplywithpsr-4autoloadingstandard.Skipping【发布时间】:2021-10-1714:58:18【问题描述】:运行composerupdate时出现此错误类MercadoPago\\AdvancedPayments\\AdvancedP... 查看详情

整个项目是不是应符合 PSR-0

...发布时间】:2012-12-2306:56:02【问题描述】:PSR-0是否可以自动加载任何类或只是库/外部api:s?符合PSR-0的MVC上的示例结构ApplicationControllerTestController.phpModelViewLibrarySystem.. 查看详情

找不到作曲家phpunit psr-4自动加载类

】找不到作曲家phpunitpsr-4自动加载类【英文标题】:composerphpunitpsr-4autoloadclassnotfound【发布时间】:2017-01-0210:27:48【问题描述】:我正在尝试使用一些phpunit测试类作曲家自动加载,但我似乎无法让它工作。当我从命令行运行phpuni... 查看详情

没有作曲家的 PSR 4 自动加载

】没有作曲家的PSR4自动加载【英文标题】:PSR4autoloadwithoutcomposer【发布时间】:2017-01-2700:55:02【问题描述】:我在一个项目中有一个使用composer自动加载的包,composer.json条目如下:"autoload":"psr-4":"CompanyName\\\\PackageName\\\\":"packages/... 查看详情

作曲家 psr-4 使用相同的键自动加载

】作曲家psr-4使用相同的键自动加载【英文标题】:composerpsr-4autoloadwithsamekey【发布时间】:2017-07-1508:40:25【问题描述】:我在composer.json中有这个设置"autoload":"psr-4":"":"src/","App\\\\":"src/App"使用此文件夹结构:src---App------MyClass.php--... 查看详情

自动加载

PHP:简单说自动加载和命名空间是不同的东西。 加载 composer自动加载的原理:http://blog.turn.tw/?p=1122  http://blog.turn.tw/?p=1039自动加载标准:https://www.php-fig.org/psr/psr-0/ js python:  查看详情

psr-0和psr-4

PSR-4issomethinglike‘relativepath‘,PSR-0,‘absolutepath‘.e.g.config:‘AppController‘=>‘dir/‘PSR-0 autoload:AppControllerIndexController-->dir/App/Controller/IndexController.phpPSR-4 a 查看详情

使用 Composer 的自动加载

】使用Composer的自动加载【英文标题】:UsingComposer\'sAutoload【发布时间】:2012-09-3021:15:27【问题描述】:我一直在网上四处寻找这个问题,但没有运气。我在我的composer.json中使用了composer的自动加载代码:"autoload":"psr-0":"AppName":"s... 查看详情

Composer、Laravel 和本地包

...题是我有一个不是存储库的包,我正试图让它与Laravel和作曲家配合得很好。它仍然位于vendor文件夹下,唯一的问题是,如果我简单地设置:"psr-0":"Test\\\\Test":"vendor/test/test/src/"这将加载服务提供者 查看详情

作曲家 PSR4 奇怪的行为

】作曲家PSR4奇怪的行为【英文标题】:ComposerPSR4weirdbehavior【发布时间】:2016-04-1318:53:56【问题描述】:不久前,我创建了一个树枝扩展。最近我添加了一个命名空间,以便我可以更轻松地与composer一起使用它。我已经这样做了... 查看详情

PSR-4 自动装弹问题

】PSR-4自动装弹问题【英文标题】:PSR-4autoloadingtrouble【发布时间】:2017-08-2207:36:47【问题描述】:我想从lib目录加载HomeController类:root/-lib/--/HomeController.php-vendor/-composer.json-index.php作曲家.json"autoload":"psr-4":"Lib\\\\":"lib/"HomeController 查看详情

composer的结构详解

...。格式是,包名映射文字说明,如:提供给PHPautoloader的自动加载映射。目前支持的有:PSR-0自动加载规范,classmap生成器,还有files。PSR-0是比较推荐的,因为它的优秀的扩展性(在添加新的类的适合,不需要重新生成自动加载器... 查看详情

php中psr-[0-4]代码规范

PHP-FIG在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org。就是这个联盟组织发明和创造了PSR-[0-4]规范,膜拜吧,屌丝们!FIG是FrameworkInteroperabilityGroup(框架可互用性小组... 查看详情