Работа с пространствами имен в среде Fat Free

Я пытаюсь работать с пространствами имен в Fat Free. Все работает нормально, но когда я добавляю пространство имен, я получаю это:

Внутренняя ошибка сервера

Fatal error: Class 'Gadgets\iPad' not found

вот мой код:

index.php

$f3=require('lib/base.php');

$f3->set('AUTOLOAD','ui/');

$f3->route('GET /', function(){

$obj=new Gadgets\iPad;

echo $obj->hallo('cat');

});

$f3->run();

интерфейс/iPad.php

namespace Gadgets;

class iPad { 

    function hallo($word){ echo $word;}}

Спасибо


person Liz    schedule 15.12.2013    source источник
comment
Не пользователь FFF, но попробуйте $obj=new \Gadgets\iPad();, чтобы начать с корневого пространства имен.   -  person halfer    schedule 16.12.2013
comment
Еще одна мысль: если iPad находится в пространстве имен Gadgets, не должно ли оно отображаться в папке «Гаджеты»? Это может быть требование автозагрузчика (опять же, просто предположение).   -  person halfer    schedule 16.12.2013
comment
@halfer прав, ваш класс должен быть в ui/Gadgets/iPad.php   -  person xfra35    schedule 16.12.2013
comment
я думал, что мне нужно использовать пространство имен, поэтому мне не нужно создавать папку гаджетов.   -  person Liz    schedule 16.12.2013
comment
Пространства имен здесь, чтобы помочь вам организовать ваш код. Если вы их используете, вы можете решить, делать это с автозагрузчиком F3 или нет. Если вы используете автозагрузчик, вы должны создать папку для каждого пространства имен. Если вы не используете автозагрузчик, вы можете хранить свои файлы как угодно, имея в виду, что вам нужно будет include каждый из них вручную.   -  person xfra35    schedule 20.12.2013
comment
@ xfra35 это очень важный комментарий. Я предлагаю добавить его в руководство пользователя и ссылку на сайт f3. Я тоже когда-то мучился с этим...   -  person ethanpil    schedule 01.08.2014
comment
@ethanpil Хорошо, сделано здесь.   -  person xfra35    schedule 15.09.2014
comment
@ xfra35, не могли бы вы преобразовать свой комментарий в ответ? Это на самом деле просветило меня, но я сначала искал Вопросы с ответами.   -  person Angel S. Moreno    schedule 27.12.2014
comment
Привет @AngelS.Moreno, рад, что помог. Я только что опубликовал это как ответ.   -  person xfra35    schedule 02.01.2015


Ответы (1)


Ваш файл класса должен появиться в папке ui\Gadgets (полный путь: ui\Gadgets\iPad.php), чтобы F3 мог найти и автоматически загрузить его. Подробнее о поведении автозагрузчика F3 см. в этом ответе.

Чтобы ответить на ваш комментарий "я думал, что мне нужно использовать пространство имен, поэтому мне не нужно создавать папку Gadgets", обратите внимание на два момента:

  • пространства имен помогают организовать код: храните все классы, связанные с общей функциональностью, в одном пространстве имен.
  • автозагрузчик поможет вам упорядочить файлы: сохраните один класс в файле и не беспокойтесь о вызовах require или include.

Обе функции (пространства имен/автозагрузчик) являются необязательными. Используйте их, если вы понимаете и нуждаетесь в них.

person xfra35    schedule 01.01.2015