当前位置: 首页 > 知识库问答 >
问题:

Composer未自动加载通过存储库>类型>路径包含的文件

何玺
2023-03-14

我有两个PSR-4 composer项目,我希望从一个项目到另一个项目,文件结构如下:

projectfoo
-public
--index.php
-src
--CompanyName
---Foo
----Foo.php
-composer.json
projectbar
-src
--CompanyName
---Bar
----Bar.php
-composer.json

composer.json文件被定义为项目库

{
    "name": "companyname/foo",
    "require": {
        "companyname/bar": "*"
    },
    "repositories": [
        {
            "type": "path",
            "url": "../projectbar"
        }
    ],
    "autoload": {
        "psr-4": {
            "CompanyName\\": "src/CompanyName"
        }
    }
}

和项目栏为:

{
    "name": "companyname/bar",
    "version": "1.0.0",
    "autoload": {
        "psr-4": {
            "CompanyName\\": "src/CompanyName"
        }
    }
}

运行编辑器更新正确地生成包含companyname/foo文件夹的供应商文件夹。

索引中。php在projectfoo中,我有:

require_once '../vendor/autoload.php';

$bar = new \CompanyName\Bar\Bar();

但是,当run\CompanyName\Bar\Bar未定义时。

为什么自动加载中不包括。php文件?

  • 刷新自动加载文件使用:作曲家安装作曲家更新作曲家转储-自动加载
  • 将供应商名称CompanyName更改为不同的名称。
  • 查看供应商\作曲家文件夹中的installed.json文件,条形图项目列为:

#

{
    "name": "companyname/bar",
    "version": "1.0.0",
    "version_normalized": "1.0.0.0",
    "dist": {
        "type": "path",
        "url": "../companyname/bar",
        "reference": "f35ed0ad82c8280db9b603712dd256074f99e196",
        "shasum": null
    },
    "type": "library",
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "CompanyName\\": "src/CompanyName",
        }
    }
}
  • 奇怪的是,当无融资创业的autoload.php文件phpUnit文件自动加载正确,并可在我的测试类。

共有1个答案

储阳曦
2023-03-14

这个问题围绕着作曲家使用符号链接链接“路径”项目的方式。

因为我是在windows系统上开发的,并在Ubuntu vagrant box上执行代码,所以在windows上设置的符号链接在运行composer install时解析为盒子内的断开路径。这也解释了为什么在windows上运行的测试能够找到Bar,而不能在虚拟框中运行测试。

为了解决这个问题,我最初强迫作曲家镜像项目而不是符号链接,但是,这仍然导致供应商文件夹中的符号链接出现问题。

我现在已经开始在不同的存储库中托管我的库,并使用“type”:“vcs”标签导入它们,这很好。Composer还可以在进行新提交时处理更新包,而在使用带有镜像的“type”:“path”标记时不会发生这种情况。

 类似资料:
  • 我有一个项目结构: 在index.php我创建2个新对象: 我的Test.php 我的App.php 我的自动加载对象在composer.json: 在index.php中成功创建了对象测试,但在创建新应用程序时,出现错误: 致命错误:未捕获错误:在第8行的/home/denis/Coding/xuborxcms/public/index.php中找不到类'Xuborx\Cms\App' 此外,当

  • 这篇文章是对 PHP自动加载功能 的一个总结,内容涉及 PHP自动加载功能 、PHP命名空间、PSR0/PSR4标准 等内容。 一、PHP 自动加载功能 PHP 自动加载功能的由来 在 PHP 开发过程中,如果希望从外部引入一个 Class ,通常会使用 include 和 require 方法,去把定义这个 Class 的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,

  • 问题内容: 我的Java应用程序有问题,特别是从计算机中的某个位置加载图像时。 在这篇文章之后,我使用和来在计算机上加载图像。首先,我将图片()放入源代码中,并且可以正常工作。但是,如果我将图像放到另一个地方(比如说),Java IDE会向我显示一个 这是代码: 问题答案: &不适用于文件路径,但适用于相对于代码库的路径。如果代码库为,则可以找到资源的相对路径为。 通过加载文件之间..differ

  • 问题内容: 如何从库本身中获取共享库的路径? 换句话说,假设使用来加载库X ,如何从库本身内部访问用于加载所述库的路径? 请注意,我不能首先将这个库加载到该库中。 更新: 这是使用静态变量的方法: 问题答案: 动态链接器实际上搜索几个位置以找到每个动态库。其中包括(来自man ld.so): 环境变量给定的路径 烘焙到二进制文件中的路径将加载条目下的库 缓存文件/etc/ld.so.cache /

  • 错误是: 项目结构: crearcompetition。php(位于public/)如下所示: 竞争。php(位于src/Championsweb/Model/VO中)如下所示: Composer.json看起来像这样: 指数php具有自动加载要求: 自动加载类图。php具有CompetitionVO类: 基本上是竞争。看法php有一个表单,通过POST传递给CREARCOM竞。php。然后是竞争

  • 问题内容: 假设我已经使用Groovyc编译了Groovy脚本,该脚本已在文件系统中生成了一个或多个.class文件。如何从Java应用程序动态地将这些类添加到类路径中,以加载它们并调用它们的方法?目标是预编译Groovy脚本并将其存储到数据库中,以便可以从脚本的编译版本执行评估。 问题答案: 您可以创建URLClassLoader的实例以从目录加载新类: 第1 行将.class 创建到.clas