У меня были конфликты имен, поэтому я решил использовать пространства имен, но столкнулся с проблемой при попытке реализовать пространство имен с помощью автозагрузки 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






В зависимости от вашей точки зрения вы используете неправильные пространства имен.
App\Controllers вместо App\controllers.
Или вы используете неправильное имя для папок.
приложение/контроллеры вместо приложения/контроллеры
Будьте осторожны с буквами верхнего и нижнего регистра.
Похоже, у вас одна и та же проблема со всеми именами классов/именами файлов/пространствами имен. Как только вы исправите первую проблему, вторая ошибка проявится сама собой. Вам нужно помнить, что все ваши имена классов/имена файлов/пространства имен должны совпадать по структуре и имени и учитывать нижний/верхний регистр, за исключением пространства имен приложения, у вас уже есть псевдоним для него в вашем композиторе.json
Я так и сделал, но столкнулся с той же ошибкой, совпадение с ней, это может быть связано с маршрутом? Потому что, как уже было сказано, я использовал пространство имен позже, прежде чем использовать маршрут.
Вы должны предоставить свой код еще раз, но как он будет на самом деле после ваших последних обновлений, иначе мы не сможем точно знать, что происходит. Но я думаю, что вам еще нужно исправить имена классов/имена файлов/пространства имен.
@RishabhRaj в home.php: У тебя есть use App\Models\User;. Но я не вижу этого в вашей файловой структуре. Это верно? Кроме того, чтобы предотвратить проблемы с регистром, я бы посоветовал убедиться, что ВСЕ файлы имеют один и тот же регистр. Предпочтительно "PascalCase" (en.wikipedia.org/wiki/Camel_case) (вторая линия)
@UlisesRendon, я загрузил ту же структуру, пожалуйста, проверьте github.com/rajrishabh1/project
Теперь я вижу проблему. Вы должны следовать стандарту именования папок, файлов, классов и пространств имен. Это означает, что первая буква вашей папки должна начинаться с заглавной буквы, а имя файла, содержащего класс, должно начинаться с заглавной буквы, а имя файла, содержащего класс, должно начинаться с заглавной буквы. класс внутри должен соответствовать имени, например: app/Models/User.php => пространство имен App\Models; class User{} Примените это правило ко всем вашим классам и их ссылкам в вашем коде, и это решит вашу проблему. Для справки проверьте страницу рекомендаций по стандартам PHP: php-fig.org/psr/psr-1/#3 -namespace-and-class-names
@UlisesRendon, но каждый первый символ класса уже в верхнем регистре, скажите, пожалуйста, где я нашел его в нижнем регистре, или можете это исправить, это действительно беспокойно, я до сих пор не могу это исправить
Все ваши имена каталогов написаны строчными буквами: имя каталога контроллеров должно быть Controllers, имя каталога моделей должно быть Models, имя основного каталога должно быть Core, имя каталога libs должно быть Libs, а затем файлы: имя файла app.php должно быть App ( но в файле index.php вы ссылаетесь на него) имя файла baseController.php должно быть BaseController.php, имя файла home.php должно быть Home.php и, наконец, есть несколько ссылок, я не могу рассказать вам их все здесь, просто найдите контроллеры/ в точном случае совпадают и повторяются для остальных каталогов/файлов, которые вы меняете
@UlisesRendon У меня возникла проблема, потому что в моих моделях имя файла было user.class.php, и когда я удалил класс, он работал, но можете ли вы объяснить, почему он не работал из-за класса, потому что, когда я не использовал пространство имен, оно работало отлично
@UlisesRendon Кстати, спасибо, удалил класс, чтобы он заработал, и он работает
@UlisesRendon У меня есть еще один вопрос, можешь ли ты ответить, потому что я не могу задать еще один вопрос, потому что меня заблокировали
@UlisesRendon, я использую токен csrf, поэтому, когда session_id восстанавливает токен csrf, показывая инвалид. Пожалуйста, ознакомьтесь с руководством, github.com/rajrishabh61/project.git
Теперь я получаю эту ошибку
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