Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Fatal error: Uncaught Error: Class

Bom dia,

Estou recebendo esse erro, e não consigo entender porque, conferi o código muitas vezes e não encontro erros no código. Tentei adicionar o use Alura\Cursos\Controller\EditaCurso no arquivo index, e não deu boa, já não sei mais oque tentar...

Fatal error: Uncaught Error: Class "Alura\Cursos\Controller\EditaCurso" not found in C:\xampp\htdocs\PHP - Alura\G- mvc-com-php\public\index.php:30 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PHP - Alura\G- mvc-com-php\public\index.php on line 30

EditaCurso

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Curso;
use Alura\Cursos\Infra\EntityManagerCreator;
use Alura\Cursos\Doctrine\Common\Persistence\ObjectRepository;

class EditaCurso implements InterfaceControladorRequisicao
{

    /** @var ObjectRepository */

    private $repositorioCursos;

    public function __construct()
    {
        $entityManager = (new EntityManagerCreator())->getEntityManager();
        $this->repositorioCursos = $entityManager->getRepository(Curso::class);
    }

    public function processaRequisicao(): void
    {
        $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);        
        if (is_null($id) || $id === false) {
            header('Location: /listar-cursos');
            return;
        }

        $curso = $this->repositorioCursos->find($id);
        $titulo =  'Alterar curso ' . $curso->getDescricao();
        require __DIR__ . '/../../view/cursos/formulario.php';
    }
}

routes

<?php

use Alura\Cursos\Controller\{FormularioInsercao, ListarCursos, SalvarCurso, ExcluirCurso, EditaCurso};

// Cria rotas para passarpara index.php
return [
    '/listar-cursos' => ListarCursos::class,
    '/novo-curso' => FormularioInsercao::class,
    '/salvar-curso' => SalvarCurso::class,
    '/excluir-curso' => ExcluirCurso::class,
    '/editar-curso' => EditaCurso::class
];

formulario

<?php include __DIR__ . '/../header.php' ; ?>

<form action="/salvar-curso" method="POST">
    <div class="form-group">
        <label for="descricao">Descricao</label>
        <input type="text" class="form-control" id="descricao" name="descricao"
        value="<?= isset($curso) ? $curso->getDescricao() : ''; ?>">
    </div>
    <button class="btn btn-primary my-2">Salvar</button>
</form>

<?php include __DIR__ . '/../footer.php' ; ?>

index

<?php
                                /*******************************/
                                /*             FRONT CONTROLLER           */
                                /*******************************/

require_once __DIR__ . '/../vendor/autoload.php';
use Alura\Cursos\Controller\InterfaceControladorRequisicao;

$caminho = $_SERVER['PATH_INFO'];

$rotas = require_once __DIR__ . '/../config/routes.php';

if (!array_key_exists($caminho, $rotas)) {
    http_response_code(404);
    exit();
}
$classeControladora = $rotas[$caminho];
/** @var InterfaceControladorRequisicao */
$controlador = new $classeControladora();
$controlador->processaRequisicao();

?>
4 respostas

O erro acontece só com esse controller? Consegue compartilhar o projeto completo, por favor? Talvez seja um erro na sua configuração de autoload. O arquivo está na pasta certa?

Segue link do github Vinicius https://github.com/rbmatos/G--mvc-com-php.git

solução!

Rodrigo, seu arquivo se chama EditarCurso.php e a classe se chama EditaCurso. Assim o autoload não vai funcionar. A PSR-4 exige que as classes e os arquivos possuam o mesmo nome.

Era isso mesmo, valeu professor!