Класс не найден ошибка, используя пространства имен и "использовать" - PullRequest
0 голосов
/ 29 сентября 2019

Я новичок в PHP и слежу за онлайн-курсом (по этой причине я не использую автозагрузку или любой другой способ загрузки классов).

Моя проблема в том, что мой класс контроллера (в котором я использую «use») не может видеть класс моей модели (в котором я объявил пространство имен).

Ошибка:

Неустранимая ошибка: Uncaught Error: Класс 'App \ Models \ Post' не найден в C: \ xampp_php729 \ htdocs \ Freeblog \ App \ Controllers \ postController.php в строке 20

Вот мой код:

PostController.php


namespace App\Controllers;

use App\Models\Post;

class PostController {

    protected $layout = __DIR__ . '/../../Layout/index.template.php';
    protected $conn;
    public $content;
    public $posts;
    protected $myPost;

    public function __construct(\PDO $conn) {
        $this->conn = $conn;

        try {

            $this->myPost = new Post($conn);
        } catch (Exception $e) {
            die($e->getMessage());
        }
        $this->content = $this->process();
    }
....
} 

Post.php:

namespace App\Models;
use \PDO;


class Post {

    protected $conn;

    public function __construct(PDO $conn){
        $this->conn = $conn;

    } 
...
}

Это структура проекта:

Project structure

1 Ответ

0 голосов
/ 29 сентября 2019

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

Поэтому, если вы не хотите использовать автозагрузку, вы должны либо использовать оператор include, либо запросить оператор для включения файлов вручную (файлы, находящиеся в другом каталоге). (Включите файл Post.php в файл PostController.php)

Как уже упоминалось в ваших комментариях, другие работающие файлы должны загружаться, поскольку они существуют в одном каталоге (здесь не имеет значения один и тот же пакет, но тот же каталог имеет значение для загрузки других файлов).

...