我是使用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 回答
"key"应该是您放置为"value"的路径下的目录,该目录应该是 relative 到您的工作目录 . 要以简单的方式查看它,
namespace
应该映射目录结构;你错过了一个MyApp
目录 .如果你的
composer.json
有:然后你需要
app/
下的MyApp
目录 . 试试这个:composer.json:
Underline.php:
Bold.php:
理论上,这应该工作(没有测试:))
来源:
https://getcomposer.org/doc/04-schema.md#psr-0
http://www.php-fig.org/psr/psr-0/