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

Controller não funciona ao ser importado com 'use' na pasta public/index

criei meu autoloader, o controller, pasta de rotas, mas ao importar o controller no com 'use' no arquivo 'public/index.php' ocorre um erro. Só funciona se eu importar com require_once.

O engraçado é que o PersonRepository funciona importado pelo 'use', mas meus controllers não.

autoloader

{
    "autoload": {
        "psr-4": {
            "App\\Test\\": "src/"
        }
    }
}

Controller

<?php

declare(strict_types=1);

namespace App\Test\Controller\Pessoa;

use App\Test\Controller\Controller;
use App\Test\Repository\PersonRepository;

class ListaPessoasController implements Controller
{

    public function __construct(private PersonRepository $personRepository)
    {
    }

    public function processaRequisicao()
    {
        $pessoas = $this->personRepository->getAll();

        require_once __DIR__ . '/../../../views/home.php';
    }  
}

Config/route.php

<?php

declare(strict_types=1);

use App\Test\Controller\Pessoa\ListaPessoasController;

return [
    'GET|/todos' => ListaPessoasController::class,
];

public/index.php

<?php

declare(strict_types=1);

use App\Test\Controller\Pessoa\ListaPessoasController;
use App\Test\Repository\PersonRepository;

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

$servername = "";
$username = "";
$password = "";
$dbName = "";
try {
    $pdo = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $error) {
    echo "Connection failed: " . $error->getMessage();
}
$personRepository = new PersonRepository($pdo);

$routes = require_once __DIR__ . "/../config/route.php";
$pathInfo = $_SERVER['PATH_INFO'] ?? '/';
$httpMethod = $_SERVER['REQUEST_METHOD'];


$key = "$httpMethod|$pathInfo";
if (array_key_exists($key, $routes)) {
    $controllerClass = $routes["$httpMethod|$pathInfo"];
    $controller = new $controllerClass($personRepository);
} else {
    echo "Algum erro ao tentar carregar";
}

/** @var Controller $controller */
$controller->processaRequisicao();

Alguem poderia me ajudar, eu já estou sem ideias para testar. desde já agradeço demais.

2 respostas

Será que já está sendo importado automaticamente em outro local? Aparece alguma mensagem de erro?

solução!

Acabou funcionando, não sei como ou o que eu fiz de direrente.