如何使用 Composer 的自动加载器自动加载未在 composer.json 中配置的任意 classes/namespaces?
How to use Composer's autoloader to autoload arbitrary classes/namespaces not configured in composer.json?
出于一些不重要的原因(让我们称之为好奇心)我正在尝试使用 Composer 的自动加载器加载不在 composer.json
/composer.lock
.
中的包
这是我尝试过的方法:
$loader = new \Composer\Autoload\ClassLoader();
$loader->addPsr4('MyNameSpace\', __DIR__ . '/vendor/username/projectname/src');
$loader->register();
不幸的是,这不起作用。每当我尝试执行 use MyNameSpace\Whatever; $a = new Whatever;
时,我都会收到有关如何找不到 Whatever
的错误消息。
使用此文件结构:
其中 class Test1
是:
// out/Test1.php
class Test1
{
public function foo(): string
{
return "foo bar baz";
}
}
和class FooBar/Console/Test2
是:
// psr4/someroot/Console/Test2
namespace FooBar\Console;
class Test2
{
public function bar(): string
{
return "fizz buzz";
}
}
并在测试脚本中使用它 (test.php
)
// test.php
require __DIR__ . '/vendor/autoload.php';
$loader = new \Composer\Autoload\ClassLoader();
$loader->add('Test1', __DIR__ . '/out');
$loader->addPsr4('FooBar\', __DIR__ . '/psr4/someroot');
$loader->register();
$t1 = new Test1();
$t2 = new \FooBar\Console\Test2();
echo $t1->foo(), "\n";
echo $t2->bar(), "\n";
我可以 运行 php test.php
完全可以。
所以您的项目中一定有其他配置错误。使用上面的示例作为修复它的指南。
出于一些不重要的原因(让我们称之为好奇心)我正在尝试使用 Composer 的自动加载器加载不在 composer.json
/composer.lock
.
这是我尝试过的方法:
$loader = new \Composer\Autoload\ClassLoader();
$loader->addPsr4('MyNameSpace\', __DIR__ . '/vendor/username/projectname/src');
$loader->register();
不幸的是,这不起作用。每当我尝试执行 use MyNameSpace\Whatever; $a = new Whatever;
时,我都会收到有关如何找不到 Whatever
的错误消息。
使用此文件结构:
其中 class Test1
是:
// out/Test1.php
class Test1
{
public function foo(): string
{
return "foo bar baz";
}
}
和class FooBar/Console/Test2
是:
// psr4/someroot/Console/Test2
namespace FooBar\Console;
class Test2
{
public function bar(): string
{
return "fizz buzz";
}
}
并在测试脚本中使用它 (test.php
)
// test.php
require __DIR__ . '/vendor/autoload.php';
$loader = new \Composer\Autoload\ClassLoader();
$loader->add('Test1', __DIR__ . '/out');
$loader->addPsr4('FooBar\', __DIR__ . '/psr4/someroot');
$loader->register();
$t1 = new Test1();
$t2 = new \FooBar\Console\Test2();
echo $t1->foo(), "\n";
echo $t2->bar(), "\n";
我可以 运行 php test.php
完全可以。
所以您的项目中一定有其他配置错误。使用上面的示例作为修复它的指南。