Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro: Call to a member function findAll() on null

Oláa! Estou tendo o seguinte erro ao tentar acessar a minha página listar-cursos através do controller:

Fatal error: Uncaught Error: Call to a member function findAll() on null in C:\Users\BIANCA.FIALHO\Documents\curso php\php-mvc\gerenciador-de-cursos\src\Controller\ListarCursos.php:19 Stack trace: #0 C:\Users\BIANCA.FIALHO\Documents\curso php\php-mvc\gerenciador-de-cursos\public\index.php(10): Alura\Cursos\Controller\ListarCursos->processaRequisicao() #1 {main} thrown in C:\Users\BIANCA.FIALHO\Documents\curso php\php-mvc\gerenciador-de-cursos\src\Controller\ListarCursos.php on line 19

codigo da classe ListarCursos:

<?php

namespace Alura\Cursos\Controller;

use Alura\Cursos\Entity\Curso;
use Alura\Cursos\Infra\EntityManagerCreator;

class ListarCursos 
{
    private $repositorioDeCursos; 

    public function __construct() 
    {
        $entityManager = (new EntityManagerCreator())->getEntityManager();
        $this->$repositorioDeCursos = $entityManager->getRepository(Curso::class);
    }
    public function processaRequisicao()
    {
        $cursos = $repositorioDeCursos->findAll();
        ?>
                <!DOCTYPE html>
        <html lang="pt-BR">
        <head>
            <meta charset="UTF-8">
            <title>Document</title>
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
        </head>
        <body>
        <div class="container">
            <div class="jumbotron">
                <h1>Listar cursos</h1>
            </div>

            <a href="formulario-novo-curso" class="btn btn-primary mb-2">
                Novo Curso
            </a>

            <ul class="list-group">
                <?php foreach ($cursos as $curso): ?>
                    <li class="list-group-item">
                        <?= $curso->getDescricao(); ?>
                    </li>
                <?php endforeach; ?>
            </ul>
        </div>
        </body>
        </html>
        <?php
    }
}

código do index:

<?php

require __DIR__ . '/../vendor/autoload.php';

use Alura\Cursos\Controller\ListarCursos;

switch ($_SERVER['PATH_INFO']) {
    case '/listar-cursos':
        $controlador = new ListarCursos();
        $controlador->processaRequisicao();
        break;
    case '/formulario-novo-curso':
        require 'formulario-novo-curso.php';
        break;
    default:
        echo "Erro 404: Não Encontrado";
}
2 respostas
solução!

Oi Bianca, beleza?

O erro informa que você está tentando acessar o método findAll através de um valor nulo.

Eu acredito que o erro esteja nessa linha $this->$repositorioDeCursos = $entityManager->getRepository(Curso::class);, oberseve que vc passa um $ a mais "$this->$re..."

Deixe da seguinte forma e veja se funciona: $this->repositorioDeCursos = $entityManager->getRepository(Curso::class);

Caso isso resolva não esqueça de marcar a solução para que o tópico seja finalizado.

Bons estudos.

Funcionou Diego, muito obrigada! Desatenção minha!