首页 文章

Composer Autoload未加载Class

提问于
浏览
0

我是使用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();

我的类文件名为Underline.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;

     }

   }

  ?>

我的另一个类文件名Bold.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类文件中出现“class not found error” . 但是当我直接包含下划线类文件时,我得到了输出 . 当我使用自动加载时为什么它不起作用?

任何人都可以帮我找到问题吗?

1 回答

  • 1

    "key"应该是您放置为"value"的路径下的目录,该目录应该是 relative 到您的工作目录 . 要以简单的方式查看它, namespace 应该映射目录结构;你错过了一个 MyApp 目录 .

    如果你的 composer.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);
    

    理论上,这应该工作(没有测试:))


    来源:

相关问题