Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Trying to get property 'textContent' of non-object

Bom, essa é a única mensagem que ele mostra inúmeras vezes como Notice e PHP Notice, apontando erro no foreach do buscarCursos. Segue código.

buscarCursos.php

<?php

require 'vendor/autoload.php';
require 'src/Alura/BuscadorDeCursos/Buscador.php';

use Symfony\Component\DomCrawler\Crawler;
use src\Alura\BuscadorDeCursos\Buscador;

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

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

foreach ($cursos as $curso) {
    echo $curso->textContent.PHP_EOL;
}

Buscador.php

<?php
namespace src\Alura\BuscadorDeCursos;

use GuzzleHttp\ClientInterface;
use Symfony\Component\DomCrawler\Crawler;

class Buscador
{
    public function __construct(ClientInterface $httpClient, Crawler $crawler){
        $this->httpClient = $httpClient;
        $this->crawler = $crawler;
    }

    public function buscar (string $url): array {
        $response = $this->httpClient->request('GET', $url);

        $html = $response->getBody();
        $this->crawler->addHtmlContent($html);

        $elementosCursos = $this->crawler->filter('span.card-curso__nome');
        $cursos = [];

        foreach ($elementosCursos as $elementoCurso){
            $cursos[] = $elementoCurso->textContent;
        }

        return $cursos;

    }
}
1 resposta
solução!

Olá Augusto,

O detalhe nesse caso é que você já está retornando um array com o valor do textContent (dentro do foreach no seu Buscador.php você já faz $cursos[] = $elementoCurso->textContent;), então você só precisa escrever direto echo $curso . PHP_EOL; que já deve funcionar:

# buscarCursos.php
# ...
foreach ($cursos as $curso) {
    echo $curso . PHP_EOL;
}

Espero ter ajudado, qualquer coisa é só falar!