1
resposta

Chamar o método de uma classe com composer

Bom dia. Fiz o teste que o professor explicou na aula sobre chamar o método de uma classe com composer mas aparece esse aviso:

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

Até coloquei o vendor/autoload no arquivo da classe, mas não funcionou:

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

1 resposta

Olá, Karolina. Tudo bem?

Primeiramente gostaria de pedir desculpas pela demora em responder o seu tópico.

Para ser sincero eu tentei fazer aqui da maneira que ele disse também e não consegui. Mas eu fui procurar mais a fundo como fazer funcionar, e eu achei uma solução.

Da maneira como o seu código está, não é possível fazer isso diretamente pelo script mencionado, isso porque o método buscar() precisa da URL, httpClient e Crawler. Logo, ao fazer a chamada para o comando: composer exibe-cursos você não consegue "injetar" essas dependências.

Uma solução, é você criar uma outra classe conforme o código abaixo:

<?php

namespace Alura\BuscadorDeCursos;

use Alura\BuscadorDeCursos\Buscador;
use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;

class BuscadorController
{
    public static function buscar()
    {
        require 'vendor/autoload.php';

        function exibeMensagem(string $mensagem)
        {
            echo $mensagem . PHP_EOL;
        }

        $client = new Client(['base_uri' => 'https://www.alura.com.br/', 'verify' => false]);
        $crawler = new Crawler();

        $buscardor = new Buscador($client, $crawler);
        $cursos = $buscardor->buscar('/cursos-online-programacao/php');

        foreach ($cursos as $curso) {
            exibeMensagem($curso);
        }
    }
}

Essa classe contém o mesmo conteúdo do arquivo "buscar-cursos.php", eu só adicionei tudo isso dentro de um método estático buscar.

Tem que ser dentro de um método estático para fazer a chamada da seguinte maneira no composer.json:

    "scripts": {
        "exibe-cursos": "Alura\\BuscadorDeCursos\\Buscador::buscar"
    }

Fazendo essas alterações irá funcionar =D

Espero ter ajudado e bons estudos :)

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