Класс не найден ошибка с автозагрузкой PHP Composer

Ошибка:

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

CrearCompeticion.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';

CompeticionVO.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" : [
"./"]
}
}

index.php имеет автозагрузку требуют:

<?php

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

autoload_classmap.php имеет класс CompeticionVO:

<?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',
);

По сути, CrearCompeticion.view.php имеет форму, которая передается через POST в CrearCompeticion.php. Затем CrearCompeticion.php пытается создать экземпляр CompeticionVO с информацией о форме, но я получаю ошибку.

Что я делаю неправильно? Кроме того, я получил свой файл composer.json из некоторого учебного пособия, но я не очень понимаю, как он работает, и я бы с удовольствием.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Вот как выглядит autoload_static.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);
}
}

0

Решение

Итак, как вы сказали, вы публикуете скрипт под названием CrearCompeticion.php который расположен в пределах public/ каталог.

Это означает, что любой код присутствует в index.php, в том числе require '../vendor/autoload.php';, не выполняется в этом случае.

Итак, в вашем случае (вы сказали, что следили за Laracast, но, похоже, не используете настройку приложения Laravel), вы захотите добавить require __DIR__ . '/../vendor/autoload.php'; на вершине CrearCompeticion.php а также, что должно делать работу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector