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

编写器自动加载未加载该类

谷梁云瀚
2023-03-14

我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。

我的composer.json文件:/var/www/html/silexapp/composer.json

{
"require": {
    "silex/silex": "~2.0",
    "symfony/console": "~2.6"
},
"autoload": {
    "psr-0": {
        "MyApp": "/silexapp/app"
    }
}
}

我的作曲家供应商自动加载文件:/var/www/html/silexapp/vendor/autoload。php

     <?php

      // autoload.php @generated by Composer

     require_once __DIR__ . '/composer' . '/autoload_real.php';

    return ComposerAutoloaderInitf7241d907c173a8d77da0791cc918856::getLoader();

我的类文件名下划线。php:/var/www/html/silexapp/app/Tnq/Todo/Command/Underline。php

      <?php 
      namespace MyApp\Tnq\Todo\Command;
     class Underline{

        public function add($a,$b){

        return $result = $a+$b;

     }

   }

  ?>

我的另一个类文件名为粗体。php:/var/www/html/silexapp/app/Tnq/Todo/Command/Bold。php

    <?php
    require_once "../../../../vendor/autoload.php";
    //require_once "Underline.php";

   use MyApp\Tnq\Todo\Command as tool;

   echo "this is the index file to check namespace.";
   $c = new tool\Underline();
   echo "=============================";
   echo "Addition : ".$c->add(2,2);
   ?>

我得到"类未找到错误"在我的bold.php类文件,当我使用自动加载文件。但是当我直接包含下划线类文件时,我得到了输出。为什么它不工作时,我使用自动加载?

有人能帮我找到问题吗?

共有1个答案

任元青
2023-03-14

“键”应该是路径下的一个目录,你把它作为“值”,它应该是相对于你的工作目录的。从一个简单的角度来看,命名空间应该映射目录结构;你缺少一个MyApp目录。

如果在编写器中。json有:

    "autoload": {
        "psr-0": {
            "MyApp\\": "app/"
        }
    }

然后你需要在app/下有一个MyApp目录。试试这个:

composer.json:

// /var/www/html/silexapp/composer.json
{
    "require": {
        "silex/silex": "~2.0",
        "symfony/console": "~2.6"
    },
    "autoload": {
        "psr-0": {
            "Tnq\\": "app/"
        }
    }
}

Underline.php:

<?php
// /var/www/html/silexapp/app/Tnq/Todo/Command/Underline.php 
namespace Tnq\Todo\Command;

class Underline
{
    public function add($a,$b)
    {
        return $result = $a+$b;
    }
}

Bold.php:

<?php
// /var/www/html/silexapp/app/Tnq/Todo/Command/Bold.php
require_once "../../../../vendor/autoload.php";

use Tnq\Todo\Command as tool;

echo 'this is the index file to check namespace.' . PHP_EOL;
$c = new tool\Underline();
echo "=============================";
echo "Addition : ".$c->add(2,2);

理论上,这应该是可行的(未测试:))

资料来源:

  • https://getcomposer.org/doc/04-schema.md#psr-0

 类似资料:
  • 我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行

  • 我试图使用高斯,但我得到以下致命错误: 致命错误:类GuzzleHttp\ClientInterface在第13行的 /var/www/myapp/vendor/guzzlehttp/guzzle/src/functions.php中找不到 我正在使用composer autoloader自动加载: 发生了什么事? 编辑 我的composer.json: 编辑2 我的作曲家。锁 编辑3 编写器配置

  • 我已经设置了两个项目,一个“init”和一个库,这是init所需要的。它们都设置了PSR-0自动加载,但是库中的自动加载值不会添加到初始化项目中的供应商/作曲家/autoload_namespaces.php中。 示例作曲家。来自库的json: 示例作曲家。来自需要该库的项目的json: 该库包含文件src/LXP/library/Something中的类LXP\library\Something

  • 我遇到了使用作曲家psr-4自动加载功能和PHPUnit的问题。问题发生在我的本地机器以及TravisCI版本上。单元测试无法找到我的类,而普通脚本可以找到。 当然,任何配置都有问题,但我无法找出我做错了什么。提前感谢你的帮助。 这是我的项目文件结构: 公共/ src/ http/ urlhelper。php 小黑 超文本传输协议/ urlhelper.test.php 这是我的作曲家的作品。js

  • 我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。 这是我的供应商/autoload_namespaces.php的内容 作曲家是否应该为composer.json文件中定义了{autoload}的所

  • 我启动了一个新的PHP项目,并希望使用PSR-4从composer自动加载。 项目结构如下: 这是我的作曲家。json: 这是我的ser.php 还有用户测试。php 当我运行单元测试时,我得到以下消息: 致命错误:找不到类“model\User”。