Появляется ошибка на локальном сервере 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 шт):
testsite данная папка в корне или это и есть корень проекта? Корень прописан в сomposer.json?
По ошибке видно то, что автозагрузчик не может найти класс, это может быть по двум причинам, первая: у вас попросту нет данного файла\класса, но раз уж он у вас создан, то ошибка явно в иерархии директорий и файлов.
Попробуйте добавить в composer.json следующее:
"autoload": {
"psr-4": {
"Testsite\\": "testsite/",
...
...
}
}
При этом, папка testsite с вашим классом должна находиться в корне проекта, в классе, в котором вы будете использовать данный класс необходимо указывать Testsite с большой буквы согласно правилам PSR.
К примеру use Testsite\myclass
[если мой ответ вам помог, то проголосуйте за него и нажмите на галочку справа у ответа]