Реализация пространств имен в FatFree Framework

Я пытаюсь использовать пространства имен в 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/

Я не уверен, что происходит не так.

Заранее спасибо.

6

Решение

Автозагрузчик 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

Возможны три конфигурации:

Конфиг 1

$f3->set('AUTOLOAD','src/controllers/')

Тогда все файлы в src/controllers/ будет загружен автоматически, но помните: src/controllers/ карты к корневое пространство имен, так что это означает, что Index класс должен принадлежать корневому пространству имен (полный путь: \Index).

Конфиг 2

$f3->set('AUTOLOAD','src/')

Тогда все файлы в src/ будет автоматически загружен, что означает Index класс должен принадлежать Controllers пространство имен (полный путь: \Controllers\Index).

Конфиг 3

$f3->set('AUTOLOAD','./')

Тогда все файлы в ./ будет автоматически загружен, что означает Index класс должен принадлежать Src\Controllers пространство имен (полный путь: \Src\Controllers\Index).

11

Другие решения

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
1

Попробуйте этот конфиг — Ваш класс:

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;
});

Надеюсь, это поможет.

0
По вопросам рекламы [email protected]