Я создаю собственную инфраструктуру mvc с нуля, и когда я помещаю что-то для печати в мой PageController, приложение работает, но когда я создаю какой-то другой контроллер и пытаюсь что-то напечатать, оно просто печатает данные из PageController.
Я думаю, что проблема в том, куда я помещаю защищенные переменные $currentController = 'PageController';
и $this->currentController = new PageController();
.
Теперь я попытался поставить $this->currentController = new $this->currentController;
, и я получил эту ошибку:
'Неустранимая ошибка: ошибка Uncaught: класс' PageController 'не найден в C: \ xampp \ htdocs \ php\ App \ Libraries \ Core.php: 20 Трассировка стека: # 0 C: \ xampp \ htdocs \ php \ public \ index.php (7): App \ Libraries \ Core -> __ construct () # 1 {main}, брошенный вC: \ xampp \ htdocs \ php \ App \ Libraries \ Core.php в строке 20 '.
Также я использую composer и автозагрузку с psr-4 и пространством имен.
Core.php
namespace App\Libraries;
use App\Controllers\PageController;
class Core
{
protected $currentController = 'PageController';
protected $currentMethod = 'index';
protected $params = [];
public function __construct()
{
$url = $this->getUrl();
if (file_exists('../App/Controllers/' . ucwords($url[0]) . '.php')) {
$this->currentController = ucwords($url[0]);
unset($url[0]);
}
require_once '../App/Controllers/' . $this->currentController . '.php';
$this->currentController = new PageController();
}
public function getUrl()
{
if (isset($_GET['url'])) {
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
return $url;
}
}
}
PageController.php
namespace App\Controllers;
class PageController
{
public function __construct()
{
echo "Page Loaded!!!";
}
}
PostController.php
namespace App\Controllers;
class PostController
{
public function __construct()
{
echo "Post Controller Loaded!!!";
}
}
index.php (в общей папке)
use App\Libraries\Core;
require_once '../App/bootstrap.php';
$init = new Core;
bootstrap.php (в папке приложения)
<?php
require dirname(__DIR__) . '..\vendor\autoload.php';
Я ожидаю, что когда я сделаю какой-то другой контроллер, сможет что-то записать в него и получить вывод без ошибок или тех же данных, что и в PageController.