PHP Uncaught Error: Class not found using composer autoload
PHP Uncaught Error: Class not found using composer autoload
我正在使用 SymfonyConsole 包编写一个简单的项目,但我遇到 class 未找到异常:
PHP Fatal error: Uncaught Error: Class 'Project\ExtractLinkCommand' not found in /home/PhpstormProjects/RVLE/RVLE.php:9
Stack trace:
#0 {main}
thrown in /home/PhpstormProjects/RVLE/RVLE.php on line 9
我找不到问题所在,有人说自动加载器不是标准的,你应该自己写。
我还更新了 composer 和 运行 composer dump-autoload
.
这是我的文件 ->
RVLE.php:
#!/usr/bin/env php
<?php
require 'vendor/autoload.php';
use Project\ExtractLinkCommand;
use Symfony\Component\Console\Application;
$app = new Application('RVLE' , '1.0');
$app->add(new ExtractLinkCommand());
$app->run();
extractCommand.php:
<?php namespace Project;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ExtractLinkCommand extends Command
{
public function configure()
{
$this->setName('getLinks')
->setDescription('extract all available video links for given page url')
->addArgument('url', InputArgument::REQUIRED, 'page link');
}
public function execute(InputInterface $input, OutputInterface $output)
{
$url = $input->getArgument('url');
$output->writeln($url);
}
}
composer.json:
{
"require": {
"symfony/console": "^3.3"
},
"autoload": {
"psr-4": {
"Project\": "src/"
}
}
}
这是我的项目结构:
.
├── composer.json
├── composer.lock
├── RVLE.php
├── src
│ └── extractCommand.php
└── vendor
├── autoload.php
├── bin
├── composer
├── psr
└── symfony
我认为你需要将你的文件名与你的 class 名称相匹配,所以它应该是 ExtractLinkCommand.php
,否则作曲家自动加载器将找不到它。
PSR-4 仅适用于命名空间。它将composer.json中给定的命名空间前缀从全class名称中去掉,其余部分转为路径,在末尾加上“.php”,在给定的路径中查找. class myNamespace\myClass 和 "psr-4":{"myNamespace\": "src"} 将尝试加载 src/myClass.php
我正在使用 SymfonyConsole 包编写一个简单的项目,但我遇到 class 未找到异常:
PHP Fatal error: Uncaught Error: Class 'Project\ExtractLinkCommand' not found in /home/PhpstormProjects/RVLE/RVLE.php:9
Stack trace:
#0 {main}
thrown in /home/PhpstormProjects/RVLE/RVLE.php on line 9
我找不到问题所在,有人说自动加载器不是标准的,你应该自己写。
我还更新了 composer 和 运行 composer dump-autoload
.
这是我的文件 ->
RVLE.php:
#!/usr/bin/env php
<?php
require 'vendor/autoload.php';
use Project\ExtractLinkCommand;
use Symfony\Component\Console\Application;
$app = new Application('RVLE' , '1.0');
$app->add(new ExtractLinkCommand());
$app->run();
extractCommand.php:
<?php namespace Project;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ExtractLinkCommand extends Command
{
public function configure()
{
$this->setName('getLinks')
->setDescription('extract all available video links for given page url')
->addArgument('url', InputArgument::REQUIRED, 'page link');
}
public function execute(InputInterface $input, OutputInterface $output)
{
$url = $input->getArgument('url');
$output->writeln($url);
}
}
composer.json:
{
"require": {
"symfony/console": "^3.3"
},
"autoload": {
"psr-4": {
"Project\": "src/"
}
}
}
这是我的项目结构:
.
├── composer.json
├── composer.lock
├── RVLE.php
├── src
│ └── extractCommand.php
└── vendor
├── autoload.php
├── bin
├── composer
├── psr
└── symfony
我认为你需要将你的文件名与你的 class 名称相匹配,所以它应该是 ExtractLinkCommand.php
,否则作曲家自动加载器将找不到它。
PSR-4 仅适用于命名空间。它将composer.json中给定的命名空间前缀从全class名称中去掉,其余部分转为路径,在末尾加上“.php”,在给定的路径中查找. class myNamespace\myClass 和 "psr-4":{"myNamespace\": "src"} 将尝试加载 src/myClass.php