Я пытаюсь использовать пространства имен в FatFree Framework, но каким-то образом не удается найти следующий класс — моя установка
routes.ini
[routes]
GET /=Src\Controllers\Index->index
index.php
namespace Src\Controllers;
class Index {
function index($f3) {
$f3->set('name','world');
echo View::instance()->render('template.htm');
}
}
Глобальный index.php
// Retrieve instance of the framework
$f3=require('lib/base.php');
// Initialize CMS
$f3->config('config/config.ini');
// Define routes
$f3->config('config/routes.ini');
// Execute application
$f3->run();
ОБНОВИТЬ:
Ошибка:
не обнаружена
HTTP 404 (GET /)
• index.php: 13 Base-> run ()
ОБНОВЛЕНИЕ 2:
config.ini
[globals]
; Where the framework autoloader will look for app files
AUTOLOAD=src/controllers/
; Remove next line (if you ever plan to put this app in production)
DEBUG=3
; Where errors are logged
LOGS=tmp/
; Our custom error handler, so we also get a pretty page for our users
;ONERROR=""; Where the framework will look for templates and related HTML-support files
UI=views/
; Where uploads will be saved
UPLOADS=assets/
Я не уверен, что происходит не так.
Заранее спасибо.
Автозагрузчик 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
(помните: мы указали две папки автозагрузки).
NB: не забудьте указать namespace Foo\Bar
в начале myclass.php
(автозагрузчик не сделает это за вас).
—
Таким образом, чтобы ответить на вашу конкретную проблему, имея следующую структуру файлов:
- 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
пространство имен (полный путь: \Controllers\Index
).
$f3->set('AUTOLOAD','./')
Тогда все файлы в ./
будет автоматически загружен, что означает Index
класс должен принадлежать Src\Controllers
пространство имен (полный путь: \Src\Controllers\Index
).
Fat-Free всегда является корневым пространством имен «\». (следующее может быть неправильным) Поскольку F3 загружает ваши классы через автозагрузчик, вам всегда нужно добавить корневое пространство имен в ваши собственные пространства имен. В этом случае вы должны изменить его на
namespace \Src\Controllers;
И, конечно, вы должны изменить это и в вашем rout.ini.
GET /=\Src\Controllers\Index->index
Чтобы помочь вам найти эти проблемы в будущем, вы можете увеличить значение DEBUG с помощью
$f3->set('DEBUG', 2); // 0-3; 0=off, 3=way too much information
Попробуйте этот конфиг — Ваш класс:
namespace Creo\Controllers;
Рамочные маршруты
GET|POST / = \Creo\Controllers\IndexController->indexAction
расположение папки
_your_app_dir/app/Creo/Controllers
Ваш файл начальной загрузки (в данном случае в _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;
});
Надеюсь, это поможет.