Добрый день. Ради самообучения решил написать свой фреймворк, столкнулся со следующей проблемой
Есть такая конструкция
$route = new Route();
$currentController = $route->getCurrentRoute();
spl_autoload_register(function () use ($currentController) {
$controllerFileName = __DIR__ . '/../App/Controllers/' . $currentController['controller'].'Controller' . '.php';
if(file_exists($controllerFileName)) {
include $controllerFileName;
}
});
$controllerName = $currentController['controller'].'Controller';
$controller = new $controllerName;
обращаюсь в браузере на корень сайта. Должен запустится DefaultController. Однако в ответ ошибка:
Class 'DefaultController' not found in Core.php(23): Core\Core->activeController()
код самого контроллера
<?php
namespace App\Controllers;
use \Core\View;
use \Core\Controller;
/**
* Class Default
* @package App\Controllers
*/
class DefaultController extends Controller
{
public function indexAction()
{
View::renderTemplate('Home/index.html');
}
}
Что я делаю не так?
При инстанциации объекта из строки, строка должна содержать полный namespace класса:
$ctrl = 'Default';
$controllerName= "App\\Controllers\\{$ctrl}Controller";
$controller = new $controllerName;
По всей видимости у вас не правильно ищется путь к файлу, проверьте что внутри переменной $controllerFileName
:
$controllerFileName = __DIR__ . '/../App/Controllers/' . $currentController['controller'].'Controller' . '.php';
Добрый день. Попробуйте сделать проще. Определите по дефолту путь к вашим файлам. И будет что-то вроде:
spl_autoload_register(function($class) {
$path = "Classes";
if(strpos($class, "Controller") > 0) {
$path = "Controllers";
} else if (strpos($class,"Model") > 0) {
$path = "Models";
}
$classFile = "../$path/$class.php";
file_exists($classFile) ? require_once ("../$path/$class.php") : die("Class not found!");
});
Надеюсь поможет=)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем приветПомогите пожалуйста решить проблему
Ранее объект для работы с БД создавался как глобальная переменная сразу в начале выполнения скриптаПотом я переписал это в следующий вид