Организация файлов Ajax для автозагрузки с помощью php - PullRequest
0 голосов
/ 09 июля 2019

Я хочу использовать автозагрузчик в своем проекте php, и я не знаю, жизнеспособна ли моя файловая организация.Прямо сейчас моя папка структурирована следующим образом:

-ProjectFolder
   index.php
   -common
      -ajax
         ajax_file.php
      -classes
         MyClass.php

В MyClass.php у меня есть следующая строка кода namespace common\classes;.

В index.php у меня есть

spl_autoload_register(function ($class_name){
  $file = str_replace('\\', '/', $class_name);
  require "$file.php";
});

И поэтому я могу вызвать в файле index.php «тестовый» статический метод, имея следующую строку в моем коде: common\classes\MyClass::test();

Но index.php используется для получения ответов из ajax_file.PHP.Если я просто вызываю свой «тестовый» метод, просто добавляя ту же строку кода в ajax_file.php, это говорит мне, что класс не может быть найден.Я думаю, это потому, что он загружен независимо от того, что происходит в index.php.

Я не знаю, как я могу получить доступ к MyClass из ajax_file.php, и я даже не уверен, что это возможно, так как яПрочитайте некоторые вещи, которые, по-видимому, указывают на то, что невозможно «вернуться» с помощью «../» с автозагрузчиком.

Не могли бы вы сказать, каков хороший способ сделать это?

1 Ответ

1 голос
/ 10 июля 2019

Вы должны убедиться, что ваш автозагрузчик использует абсолютные, а не относительные пути.Это включает в себя определение базового каталога для корневого пространства имен, соответствующего projectFolder.

В index.php:

spl_autoload_register(function ($class_name) {
    $file = __DIR__ . '/' . str_replace('\\', '/', $class_name);
    require "$file.php";
});

У вас есть несколько примеров автозагрузчика на php-fig для соответствия стандарту (PSR-4).

Обратите внимание, что файл ajax_file.php должен явно включать автозагрузчик (и, следовательно, index.php )

...