1
resposta

Chamar classes de APIs

Olá Professor, veja se pode me ajudar.

Desenvolvi um sistema de loja virtual todo encima do que você ensinou a respeito de programação orientada a objeto com PHP, porém agora estou tendo que integrar uma API dos correios para calcular o frete e não estou conseguindo.

Eu utilizei sua função carregaClasse() em todo o sistema, sendo que todas as classes estão dentro da mesma pasta e tudo está funcionando perfeitamente.

Porém, agora eu baixei uma API dos correios através do composer e a mesma acaba ficando em outra pasta (vendor/...).

Como faço para que essa classe da API passe a funcionar agora no sistema, sem ter que tira-la da pastar vendor/...?

Dentro da classe Correios que criei eu preciso inserir a linha abaixo conforme a documentação:

namespace admin\class;

use Cagartner\CorreiosConsulta\CorreiosConsulta as CorreiosConsulta;

Mas acaba dando este erro:

<b>Warning</b>:  require_once(/Users/marcos/Sites/loja/admin/class/CorreiosConsulta.php): failed to open stream: No such file or directory in <b>/Users/marcos/Sites/loja/admin/config/config.php</b> on line <b>13</b><br />

Ou seja, ela não acha a classe desejada porque a mesma não se encontra dentro da pasta, e nem tem como eu jogar ela lá dentro, creio eu.

Como devo prosseguir? Você pode me dar essa luz?

Muito obrigado e fico no aguardo.

Grande abraço.

1 resposta

Oi Flávio, tudo bom?

O problema aqui é que a estrutura de pastas da API dos correios foge o nosso esquema de pasta. Por isso nosso autoloader não está conseguindo encontrar a classe. O que a gente pode fazer algumas verificações no autoload para a API. Algo como:

function carregaClasse($nomeDaClasse) {
    if(file_exists("class/".$nomeDaClasse.".php"){
    require_once("class/".$nomeDaClasse.".php");
   } else {
    require_once("Vendor/CaminhoAtéAClasseCorreiosConsulta/".$nomeDaClasse.".php");
    }
}

Assim se o arquivo não estiver lá na sua pasta class, ele vai procurar lá na api dos correios.

É legal sempre procurar seguir um padrão para desenvolver nossos projetos para evitar esse tipo de conflito. Nesse post aqui:

http://blog.alura.com.br/boas-praticas-de-desenvolvimento-php/

Eu falo um pouco sobre essa ideia de padrões que andam surgindo na comunidade(PSR).

Espero ter ajudado =)

Abraço e bons estudos.