Я пытаюсь использовать пространства имен в 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'); } }
Глобальный индекс.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/
maps в корневое пространство имен , поэтому это означает, что класс 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;
И, конечно, вы тоже должны изменить его на своих маршрутах.
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; });
Надеюсь, это поможет.