3
respostas

Arquivos de DAO na pasta root_app/dao

Amigos criei uma pasta "dao" e deixei minhas classes nessa pasta e fiz um novo auto-load no "cabecalho.php" mesmo assim não roda... como posso ajustar para seguir essa arquitetura.

unction carregaClasse($nomeClasse){
    require_once("class/".$nomeClasse.".php");
}

function carregaClasseDao($nomeClasseDao){
    require_once("dao/".$nomeClasseDao.".php");
}
spl_autoload_register("carregaClasse");
spl_autoload_register("carregaClasseDao");
3 respostas

Oi Felipe, tudo bem? Você pode verificar a existência do arquivo com um load só em duas pastas diferentes:

<?php
function carregaClasse($nomeClasse){

    if(file_exists("class/".$nomeClasse.".php")){
        require_once("class/".$nomeClasse.".php");
    }elseif(file_exists("dao/".$nomeClasse.".php")){
        require_once("dao/".$nomeClasse.".php");
    }

}

spl_autoload_register("carregaClasse");

Isso já ajuda, mas tem formas mais interessantes de se fazer isso. Mas você não disse exatamente por que não funcionava, você está tendo algum erro?

Tela em branco, mas de qualquer forma com o IF e FILE_EXISTS já atendeu a necessidade e rodou.

Poderia explanar uma maneira mais interessante para esse tipo de caso, além do já funcional e sugerido.

Grato pela atenção.

Uma forma mais interessante é você ter um array de diretórios e sair verificando em um laço por cada pasta. assim, caso você adicione mais um diretório, você só precisa adicionar o nome do diretório no array.

<?php
function carregaClasse($nomeClasse){
     $pastas = array('class', 'dao');
     foreach ($pastas as $pasta) {
        if(file_exists("{$pasta}/{$nomeClasse}.php")){
           return require_once("{$pasta}/{$nomeClasse}.php");
        }
     }
     throw new Exception("Classe $nomeClasse não existe");    
}

spl_autoload_register("carregaClasse");

Você não faz nada caso a classe não exista, uma opção seria lançar um erro. Você também não precisa concatenar os nomes, se usar aspas duplas, pode escrever tudo dentro, até variáveis, eu envolvi as variavels com chaves só para facilitar a leitura.

Mais avançado que isso seria você ler um outro so PSRs e adotar a PSR4 que é o padrão da comunidade e mercado para autoload, neste ponto você irá precisar fazer uso do composer, ele criará o autoload correto pra você.

PSR: http://www.php-fig.org/psr/

Composer: https://getcomposer.org/doc/01-basic-usage.md#autoloading