4
respostas

Class 'app\Serie' not found

Na estrutura do projeto a classe "Serie" é criada com o "namespace app;", e no controller é importado o "use app\Serie;", porem recebo o erro "Class 'app\Serie' not found"... fiz algumas pesquisas e percebi que em outros projetos o caminho está assim: "namespace App;" e "use App\Serie;" com a letra 'A' de App maiúscula, fiz a troca e tudo funcionou, porém no projeto a pasta é com o 'a' em minúsculo... pq isso acontece?

<?php

namespace App; // (referência funcionando)
//namespace app; (referência não encontrada embora tenha sido criada pela IDE)


use Illuminate\Database\Eloquent\Model;

class Serie extends Model
{

    protected $table = 'series';

}

4 respostas

Olá Marcos,

Essa diferença existe porque o laravel configura o composer para fazer o autoload associar a pasta app com o namespace App. Você pode até abrir o arquivo composer.json que vai encontrar lá essa configuração:

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
...
}

Assim o correto é utilizar o App (maiúsculo) mesmo no namespace, essa é a intenção do laravel.

Perfeito! O que fiquei desconfortável é que a IDE (Eclipse) não fez os imports do caminho descrito no composer.json, mas sim do caminho absoluto e isso gerou o problema e tenho que ficar mudando manualmente toda a vez que fizer uso da classe... Isso é um problema da IDE ou em todas terei que me preocupar com isso?

Deve ser algo bem específico do eclipse, talvez um plugin faltando (faz muito tempo que utilizei o eclipse então não posso afirmar com certeza).

Até mesmo utilizando o vscode que não é exatamente uma IDE completa é reconhecido corretamente o namespace base. Outro detalhe é que o model também pode ser criado por um comando do laravel do mesmo jeito que foi feita a criação da migration nessa aula, assim como é o próprio laravel que cria model não vai ter erro:

php artisan make:model Serie

Talvez após a criação do model com o namespace correto o eclipse passe a identificar corretamente quando você for utilizar a classe.

Fala, Marcos. Você continua com o problema?