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

类未找到PHP Composer自动加载时出错

封德华
2023-03-14

错误是:

Fatal error: Uncaught Error: Class 'Championsweb\Model\VO\CompeticionVO'
not found in E:\Drive\Proyectos\ChampionsEclipse\public\CrearCompeticion.php
on line 4

项目结构:

├───config
├───public
│   ├───css
│   └───js
│       └───vendor
├───src
│   └───Championsweb
│       ├───Controller
│       └───Model
│           └───VO
├───templates
├───tests
├───vendor
│   └───composer
└───views

crearcompetition。php(位于public/)如下所示:

<?php

if (isset($_POST) && sizeof($_POST) > 0) {
    $competicionVO = new \Championsweb\Model\VO\CompeticionVO(
        $_POST['nombre'],
        $_POST['anho']
    );
    $adminactions = new \Championsweb\Controller\AdminActions();
    $adminactions->crearCompeticion($competicionVO);
}

require '../views/CrearCompeticion.view.php';

竞争。php(位于src/Championsweb/Model/VO中)如下所示:

<?php
namespace Championsweb\Model\VO;

class CompeticionVO {
    public $id;
    public $nombre;
    public $anho;
    public $idGanador;

    public function __construct($nombre, $anho) {
        $this->nombre = $nombre;
        $this->anho = $anho;
    }
}

Composer.json看起来像这样:

{
    "autoload" : {
        "classmap" : [
            "./"
        ]
    }
}

指数php具有自动加载要求:

<?php

require '../vendor/autoload.php';

自动加载类图。php具有CompetitionVO类:

<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Championsweb\\Controller\\Actions' => $baseDir . '/src/Championsweb/Controller/Actions.php',
    'Championsweb\\Controller\\AdminActions' => $baseDir . '/src/Championsweb/Controller/AdminActions.php',
    'Championsweb\\Controller\\UserActions' => $baseDir . '/src/Championsweb/Controller/UserActions.php',
    'Championsweb\\Model\\Db' => $baseDir . '/src/Championsweb/Model/Db.php',
    'Championsweb\\Model\\VO\\CompeticionVO' => $baseDir . '/src/Championsweb/Model/VO/CompeticionVO.php',
    'Championsweb\\Model\\VO\\EquipoVO' => $baseDir . '/src/Championsweb/Model/VO/EquipoVO.php',
    'Championsweb\\Model\\VO\\RondaVO' => $baseDir . '/src/Championsweb/Model/VO/RondaVO.php',
    'Championsweb\\Model\\VO\\UsuarioVO' => $baseDir . '/src/Championsweb/Model/VO/UsuarioVO.php',
    'ComposerAutoloaderInit91342042e1463ce66f1dcacb1f34d909' => $vendorDir . '/composer/autoload_real.php',
    'Composer\\Autoload\\ClassLoader' => $vendorDir . '/composer/ClassLoader.php',
    'Composer\\Autoload\\ComposerStaticInit91342042e1463ce66f1dcacb1f34d909' => $vendorDir . '/composer/autoload_static.php',
);

基本上是竞争。看法php有一个表单,通过POST传递给CREARCOM竞。php。然后是竞争。php试图用表单的信息创建CompetitionVO实例,但我得到了错误。

我做错了什么?还有我的作曲家。一些教程中的json文件,但我不太明白它是如何工作的,我很乐意。

提前谢谢!

编辑:这是什么自动加载_静态。php看起来像:

<?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInit91342042e1463ce66f1dcacb1f34d909
{
    public static $classMap = array (
        'Championsweb\\Controller\\Actions' => __DIR__ . '/../..' . '/src/Championsweb/Controller/Actions.php',
        'Championsweb\\Controller\\AdminActions' => __DIR__ . '/../..' . '/src/Championsweb/Controller/AdminActions.php',
        'Championsweb\\Controller\\UserActions' => __DIR__ . '/../..' . '/src/Championsweb/Controller/UserActions.php',
        'Championsweb\\Model\\Db' => __DIR__ . '/../..' . '/src/Championsweb/Model/Db.php',
        'Championsweb\\Model\\VO\\CompeticionVO' => __DIR__ . '/../..' . '/src/Championsweb/Model/VO/CompeticionVO.php',
        'Championsweb\\Model\\VO\\EquipoVO' => __DIR__ . '/../..' . '/src/Championsweb/Model/VO/EquipoVO.php',
        'Championsweb\\Model\\VO\\RondaVO' => __DIR__ . '/../..' . '/src/Championsweb/Model/VO/RondaVO.php',
        'Championsweb\\Model\\VO\\UsuarioVO' => __DIR__ . '/../..' . '/src/Championsweb/Model/VO/UsuarioVO.php',
        'ComposerAutoloaderInit91342042e1463ce66f1dcacb1f34d909' => __DIR__ . '/..' . '/composer/autoload_real.php',
        'Composer\\Autoload\\ClassLoader' => __DIR__ . '/..' . '/composer/ClassLoader.php',
        'Composer\\Autoload\\ComposerStaticInit91342042e1463ce66f1dcacb1f34d909' => __DIR__ . '/..' . '/composer/autoload_static.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->classMap = ComposerStaticInit91342042e1463ce66f1dcacb1f34d909::$classMap;

        }, null, ClassLoader::class);
    }
}

共有1个答案

田骁
2023-03-14

正如您所说,您正在发布一个名为crearcompetition的脚本。php位于public/目录中。

这意味着无论index.php中存在什么代码,包括都需要'.../供应商/autoload.php';,在这种情况下都不会执行。

因此,在您的情况下(您说您使用了Laracast,但似乎没有使用Laravel应用程序设置),您需要添加require\uuuuu DIR.'//供应商/自动加载。php′ 位于crearcompetition的顶部。php也是,应该由它来完成这项工作。

 类似资料:
  • 我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。 我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。 结构(精简为相关文件): composer.json phpunit.xml 测试/功能/基本测试用例。php 测试/功能/主页测试。

  • 不知何故,我无法让自动加载正常工作。我正在为phpunit使用以下引导文件。 这个的输出显示,据我所知,注册应该是正常的。 不知怎的,我犯了以下错误。 在myproj文件夹src/test/unit/-DefaultDomainEventTest中,我的文件夹结构如下所示。php-bootstrap。php示例/-NotificationCountChangedEvent。php Notifica

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

  • 我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。 我的composer.json文件:/var/www/html/silexapp/composer.json 我的作曲家供应商自动加载文件:/var/www/htm

  • 问题内容: 我正在开发一个Web项目,最近安装了Postgres 9.1.1。 PostgreSQL服务器已启动并正在运行。我可以像往常一样通过psql连接,并且从我从8.5创建的数据库转储中加载并正确保存了所有内容。 因此,我还在这里下载了9.1 postgres版本的JDBC4驱动程序:http ://jdbc.postgresql.org/download/postgresql- jdbc-

  • 我试图使用. sh文件打开我的jar。不过,我遇到了这个错误: 错误:无法找到或加载主类com。姆波尔德。哈兰伯特。主要的 据我所知,它存在并应该工作,这就是我的类的样子:类 这是我的宣言 清单版本:1.0 Archiver-版本:丛Archiver 内置: Martijn 创建者:Apache Maven 3.3.9 Build-Jdk: 1.8.0_131 主要课程:com。姆波尔德。哈兰伯特