Внедрение пространств имен в режиме без жира

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

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

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

Solutions Collecting From Web of "Внедрение пространств имен в режиме без жира"

Автозагрузчик 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/ maps в корневое пространство имен , поэтому это означает, что класс Index должен принадлежать корневому пространству имен (полный путь: \Index ).

Конфигурация 2

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

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

Конфигурация 3

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

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