Появляется ошибка на локальном сервере Openserver: Fatal error: Class 'testsite\base\Controller' not found in D:\Openserver

Появляется ошибка на локальном сервере Openserver:

Fatal error: Class 'testsite\base\Controller' not found in D:\Openserver\OSPanel\domains\testsite.ru\app\controllers\AppController.php on line 11

Вот здесь класс:

<?php

namespace testsite\base;

abstract class Controller{

    public $route;
    public $controller;
    public $model;
    public $view;
    public $prefix;
    public $layout;
    public $data = [];
    public $meta = ['title' => '', 'desc' => '', 'keywords' => ''];

    public function __construct($route){
        $this->route = $route;
        $this->controller = $route['controller'];
        $this->model = $route['controller'];
        $this->view = $route['action'];
        $this->prefix = $route['prefix'];
    }

    public function getView(){
        $viewObject = new View($this->route, $this->layout, $this->view, $this->meta);
        $viewObject->render($this->data);
    }

    public function set($data){
        $this->data = $data;
    }

    public function setMeta($title = '', $desc = '', $keywords = ''){
        $this->meta['title'] = h($title);
        $this->meta['desc'] = h($desc);
        $this->meta['keywords'] = h($keywords);
    }

    public function isAjax() {
        return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
    }

    public function loadView($view, $vars = []){
        extract($vars);
        require APP . "/views/{$this->prefix}{$this->controller}/{$view}.php";
        die;
    }

}

Вот здесь файл куда надо подключить класс Contoller

<?php
namespace app\controllers;

use app\models\AppModel;
use app\widgets\currency\Currency;
use testsite\App;
use testsite\base\Controller;
use testsite\Cache;

class AppController extends Controller{

    public function __construct($route){
        parent::__construct($route);
        new AppModel();
        App::$app->setProperty('currencies', Currency::getCurrencies());
        App::$app->setProperty('currency', Currency::getCurrency(App::$app->getProperty('currencies')));
        App::$app->setProperty('cats', self::cacheCategory());
    }

    public static function cacheCategory(){
        $cache = Cache::instance();
        $cats = $cache->get('cats');
        if(!$cats){
            $cats = \R::getAssoc("SELECT * FROM category");
            $cache->set('cats', $cats);
        }
        return $cats;
    }

}

Кто покажет как исправить эту "детскую" ошибку? Пробовал разные варианты.


Ответы (1 шт):

Автор решения: ZerxaFun aKa Zerxa

testsite данная папка в корне или это и есть корень проекта? Корень прописан в сomposer.json?

По ошибке видно то, что автозагрузчик не может найти класс, это может быть по двум причинам, первая: у вас попросту нет данного файла\класса, но раз уж он у вас создан, то ошибка явно в иерархии директорий и файлов.

Попробуйте добавить в composer.json следующее:

    "autoload": {
        "psr-4": {
            "Testsite\\": "testsite/",
            ...
            ...
        }
    }

При этом, папка testsite с вашим классом должна находиться в корне проекта, в классе, в котором вы будете использовать данный класс необходимо указывать Testsite с большой буквы согласно правилам PSR.

К примеру use Testsite\myclass

[если мой ответ вам помог, то проголосуйте за него и нажмите на галочку справа у ответа]

→ Ссылка