В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Автозагрузчик Fat-Free Framework очень прост. Он ожидает, что вы определите одну или несколько автозагружаемых папок, каждая из которых будет отображаться в корневое пространство имен.
Итак, скажем, вы определяете $f3->set('AUTOLOAD','app/;inc/')
, а ваша файловая структура:
- app
- inc
- lib
|- base.php
- index.php
Затем класс с именем MyClass
, принадлежащий пространству имен Foo\Bar
(полный путь: Foo\Bar\MyClass
), должен быть сохранен либо в app/foo/bar/myclass.php
, либо inc/foo/bar/myclass.php
(помните: мы указали две папки для автоматической загрузки).
Примечание: не забудьте указать namespace Foo\Bar
в начале myclass.php
(автозагрузчик не сделает этого для вас).
-
So чтобы ответить на вашу конкретную проблему, имеющую следующую структуру файла:
- lib
|- base.php
- src
|- controllers
|- index.php
- index.php
возможны три конфигурации:
$f3->set('AUTOLOAD','src/controllers/')
Затем все файлы под src/controllers/
будут автоматически загружены, но помните: src/controllers/
сопоставляется с корневым пространством имен, поэтому означает, что класс Index
должен принадлежать корневому пространству имен (полный путь: \Index
).
$f3->set('AUTOLOAD','src/')
Затем будут загружены все файлы под src/
, что означает, что класс Index
должен принадлежать Controllers
namespace (полный путь: \Controllers\Index
).
$f3->set('AUTOLOAD','./')
Тогда все файлы под ./
будут автоматически загружены, что означает класс Index
должен принадлежать пространству имен Src\Controllers
(полный путь: \Src\Controllers\Index
).
Попробуйте эту конфигурацию - ваш класс:
namespace Creo\Controllers;
Рамочные маршруты
GET|POST / = \Creo\Controllers\IndexController->indexAction
местоположение папки
_your_app_dir/app/Creo/Controllers
Ваш файл начальной загрузки (в этом case в _your_app_dir / app /)
spl_autoload_register(function ($className) {
$filename = __DIR__ . '/' . str_replace('\\', '/', $className) . ".php";
if (file_exists($filename)) {
include($filename);
if (class_exists($className)) {
return true;
}
}
return false;
});
Надеюсь, это поможет.
Fat-Free всегда является корневым пространством имен "\". (следующее может быть неправильным). Поскольку F3 загружает ваши классы через автозагрузчик, вам всегда нужно добавить корневое пространство имен в свои собственные пространства имен. В этом случае вы должны изменить его на
namespace \Src\Controllers;
. И, конечно же, вы должны изменить его и в ваших маршрутах.
GET /=\Src\Controllers\Index->index
Чтобы помочь вам найти эти проблемы в будущем вы можете увеличить значение DEBUG с помощью
$f3->set('DEBUG', 2); // 0-3; 0=off, 3=way too much information
AUTOLOAD
- src/controllers/
. Это означает, что эта папка считается root. Таким образом, ваш индекс находится в глобальном пространстве имен: вы должны удалить директиву namespace
и вызвать GET /=Index->index
.
– xfra35
3 December 2014 в 10:57
Src\Controllers
, но измените значение AUTOLOAD
на ./
(AUTOLOAD
всегда следует указывать на корневую папку).
– xfra35
3 December 2014 в 11:47