Автозагрузка пространства имен не работает в mvc php

У меня были конфликты имен, поэтому я решил использовать пространства имен, но столкнулся с проблемой при попытке реализовать пространство имен с помощью автозагрузки psr-4. Я посмотрел пару видео, чтобы научиться этому, и попробовал это, поскольку никогда раньше не использовал его. Пожалуйста, помогите это исправить

Конкретная ошибка, с которой я столкнулся:

Неустранимая ошибка: необнаруженная ошибка: класс «App\Controllers\BaseController» не найден в C:\xampp\htdocs\project\app\controllers\home.php:8 Трассировка стека: #0 C:\xampp\htdocs\project\app \core\app.php(20): require_once() #1 C:\xampp\htdocs\project\index.php(9): App\Core\App->__construct() #2 {main}, брошенный в C: \xampp\htdocs\project\app\controllers\home.php в строке 8

базовыйконтроллер.php

namespace App\Controllers;
use App\Core\CSRFHelper;
use App\Models\Settings;
use App\Models\Category;
use App\Models\Language;
class BaseController extends Controller {

home.php

namespace App\Controllers;
use App\Controllers\BaseController;
use App\Models\User;
class Home extends BaseController {

это мой композитор.json

{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

init.php

<?php

require_once 'app/vendor/autoload.php';
require_once 'app/core/session.php';
require_once 'app/core/config.php';
require_once 'app/core/controller.php';
require_once 'app/core/functions.php';
require_once 'app/core/database.php';
require_once 'app/core/idatabase.php';
require_once 'app/core/app.php';
require_once 'app/core/CSRFHelper.php';

?>

index.php

require_once 'app/init.php';
use App\Core\App;
$app = new App();

это структура

    ├── app
    │   ├── controllers
    │   │   ├── BaseController.php
    │   │   ├── textTranslator.php
    │   │   └── home.php
    │   ├── core
    │   │   └── config.php
    │   │   ├── Controllers.php   
    │   │   ├── database.php
    │   │   └── app.php
    │   ├── models
    │   │   └── languages.php
    │   ├── libs
    │   ├── views
    │   ├── vendor
    │   │   ├── composer 
    │   │   └── autoload.php
    │   ├── composer.json
    │   ├── .htaccess
    │   └── init.php   
    ├── assets
    │   ├── css
    │   ├── fonticons
    │   ├── js
    │   └── json
    ├── .htaccess
    └── index.php
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В зависимости от вашей точки зрения вы используете неправильные пространства имен.

App\Controllers вместо App\controllers.

Или вы используете неправильное имя для папок.

приложение/контроллеры вместо приложения/контроллеры

Будьте осторожны с буквами верхнего и нижнего регистра.

Теперь я получаю эту ошибку Fatal error: Uncaught Error: Class "App\Models\User" not found in C:\xampp\htdocs\project\app\controllers\home.php:13 Stack trace: #0 [internal function]: App\Controllers\Home->index('home') #1 C:\xampp\htdocs\project\app\core\app.php(36): call_user_func_array(Array, Array) #2 C:\xampp\htdocs\project\index.php(13): App\Core\App->__construct() #3 {main} thrown in C:\xampp\htdocs\project\app\controllers\home.php on line 13

Rishabh Raj 20.02.2024 14:46

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

Ulises Rendon 20.02.2024 15:45

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

Rishabh Raj 20.02.2024 18:50

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

Ulises Rendon 20.02.2024 19:45

@RishabhRaj в home.php: У тебя есть use App\Models\User;. Но я не вижу этого в вашей файловой структуре. Это верно? Кроме того, чтобы предотвратить проблемы с регистром, я бы посоветовал убедиться, что ВСЕ файлы имеют один и тот же регистр. Предпочтительно "PascalCase" (en.wikipedia.org/wiki/Camel_case) (вторая линия)

Kerwin Sneijders 21.02.2024 11:22

@UlisesRendon, я загрузил ту же структуру, пожалуйста, проверьте github.com/rajrishabh1/project

Rishabh Raj 21.02.2024 12:08

Теперь я вижу проблему. Вы должны следовать стандарту именования папок, файлов, классов и пространств имен. Это означает, что первая буква вашей папки должна начинаться с заглавной буквы, а имя файла, содержащего класс, должно начинаться с заглавной буквы, а имя файла, содержащего класс, должно начинаться с заглавной буквы. класс внутри должен соответствовать имени, например: app/Models/User.php => пространство имен App\Models; class User{} Примените это правило ко всем вашим классам и их ссылкам в вашем коде, и это решит вашу проблему. Для справки проверьте страницу рекомендаций по стандартам PHP: php-fig.org/psr/psr-1/#3 -namespace-and-class-names

Ulises Rendon 21.02.2024 18:39

@UlisesRendon, но каждый первый символ класса уже в верхнем регистре, скажите, пожалуйста, где я нашел его в нижнем регистре, или можете это исправить, это действительно беспокойно, я до сих пор не могу это исправить

Rishabh Raj 21.02.2024 21:34

Все ваши имена каталогов написаны строчными буквами: имя каталога контроллеров должно быть Controllers, имя каталога моделей должно быть Models, имя основного каталога должно быть Core, имя каталога libs должно быть Libs, а затем файлы: имя файла app.php должно быть App ( но в файле index.php вы ссылаетесь на него) имя файла baseController.php должно быть BaseController.php, имя файла home.php должно быть Home.php и, наконец, есть несколько ссылок, я не могу рассказать вам их все здесь, просто найдите контроллеры/ в точном случае совпадают и повторяются для остальных каталогов/файлов, которые вы меняете

Ulises Rendon 21.02.2024 23:30

@UlisesRendon У меня возникла проблема, потому что в моих моделях имя файла было user.class.php, и когда я удалил класс, он работал, но можете ли вы объяснить, почему он не работал из-за класса, потому что, когда я не использовал пространство имен, оно работало отлично

Rishabh Raj 22.02.2024 11:39

@UlisesRendon Кстати, спасибо, удалил класс, чтобы он заработал, и он работает

Rishabh Raj 22.02.2024 11:44

@UlisesRendon У меня есть еще один вопрос, можешь ли ты ответить, потому что я не могу задать еще один вопрос, потому что меня заблокировали

Rishabh Raj 25.02.2024 12:00

@UlisesRendon, я использую токен csrf, поэтому, когда session_id восстанавливает токен csrf, показывая инвалид. Пожалуйста, ознакомьтесь с руководством, github.com/rajrishabh61/project.git

Rishabh Raj 25.02.2024 12:27

Другие вопросы по теме

Почему для std::make_tuple не работает поиск по аргументам?
Ошибка при зацикливании и вставке данных XML в таблицы MS SQL Server с пространством имен XQuery
Сложность разделения заголовка/источника класса в пространстве имен при использовании перегрузки оператора
Почему "xxx::function();" не работает, а "использует пространство имен xxx; function();" делает?
Концепция, согласно которой разрешены ТОЛЬКО нетиповые параметры шаблона, которые являются членами определенного пространства имен
Концепция, согласно которой разрешены ТОЛЬКО нетиповые параметры шаблона, которые являются членами определенного пространства имен
C++ — пространства имен с глобальными переменными и функциями, использующими extern
Как интерпретировать использование оператора A = ::B::C<::D::E, F> в С++?
Как «фильтровать» и «форматировать» пространства имен на основе аннотации
Разница между использованием std::cout и std::string::size_type в исходном файле