1
resposta

Quando mudo minha pasta o autoload não encontra a classe

Boa noite.

Pessoal tentei aplicar o autoload em um projeto proprio que está com as pastas um pouco diferente porem está dando um erro.

Coloquei meu index.php dentro da pasta controller Insira aqui a descrição dessa imagem para ajudar na acessibilidadeMeu autoload.php está na raiz

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Minha classe: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeEsse é o erro que recebo. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeCaso eu coloque meu index.php na raiz do projeto ele funcionar normalmente devido a isso acredito que o caminho src\Modelo\Teste.php deveria voltar um diretorio para entrar na pasta src algo como ../src\Modelo\Teste.php. O problema que dessa forma não vai funcionar.

1 resposta

Olá, Anderson. Tudo bem?

O arquivo autoload.php não está conseguindo localizar suas classes, pois você está chamando o autoload.php dentro da pasta controller, e o autoload que construímos no curso, foi desenvolvido para ser chamado em um arquivo na pasta raiz.

Quando você usa o require é como se você estivesse pegando todo o conteúdo do autoload.php e colando no arquivo index.php que está localizado dentro da pasta controller.

Porém, quando você vai usar o require para importar uma classe dessa maneira, a string do $caminhoArquivo ficará da seguinte maneira no arquivo index.php:

require_once "src\Modelo\Teste.php"

Dessa forma não está correto, para contornar isso, devemos voltar um diretório e no autoload.php ter um código semelhante a este:

<?php


spl_autoload_register(function (string $nomeCompletoDaClasse) {
    $caminhoArquivo = str_replace('Teste\\Projeto', 'src', $nomeCompletoDaClasse);
    $caminhoArquivo = str_replace('\\', DIRECTORY_SEPARATOR, $caminhoArquivo);
    $caminhoArquivo .= '.php';

    $caminhoArquivo = "../" . $caminhoArquivo;

    if (file_exists($caminhoArquivo)) {
        require_once $caminhoArquivo;
    }
});

De uma maneira semelhante ao código acima, creio que irá funcionar.

Espero ter ajudado, bons estudos :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓