Переменные

Основное использование

Переменные, определенные в Fat-Free, являются глобальными, то есть они могут быть доступны любому компоненту. Глобалы фреймворка не идентичны глобалам PHP. Переменная F3 с именем contentне идентична PHP $content. F3 сам по себе является доменным языком и поддерживает свою собственную отдельную таблицу символов для системных и прикладных переменных. Фреймворк, как и любая хорошо разработанная объектно-ориентированная программа, не загрязняет глобальное пространство имен PHP константами, переменными, функциями или классами, которые могут конфликтовать с любым приложением. В отличие от других фреймворков, F3 не использует PHP define() заявление. Все константы фреймворка ограничены классами.
Чтобы присвоить значение F3 переменной:
$f3->set('var',value)
Примечание: F3 переменные принимают все типы данных PHP, включая объекты и анонимные функции.
Чтобы задать сразу несколько переменных:
$f3->mset(
array(
'foo'=>'bar',
'baz'=>123
)
);
Чтобы получить значение переменной фреймворка с именемvar:
$f3->get('var')
Чтобы удалить F3 переменную из памяти, если она вам больше не нужна (отбросьте ее, чтобы она не мешала другим вашим функциям / методам), используйте этот метод:
$f3->clear('var')
Чтобы узнать, была ли переменная определена ранее:
$f3->exists('var')

Глобальные

F3 поддерживает свою собственную таблицу символов для переменных фреймворка и приложения, которые не зависят от PHP. некоторые переменные сопоставляются с глобалами PHP. В F3 SESSION- это эквивалент$_SESSION, а REQUESTкарты$_REQUEST-нет . Рекомендуется использовать переменные фреймворка, а не PHP, чтобы помочь вам с передачей данных между различными функциями, классами и методами. У них есть и другие преимущества:
  • Переменные фреймворка можно использовать непосредственно в шаблонах.
  • Вам не нужно указывать PHP ссылаться на переменную вне текущей области видимости, используя глобальное ключевое слово внутри каждой функции или метода. Все переменные F3 являются глобальными для вашего приложения.
  • Установка F3 эквивалента PHP SESSIONтакже изменяет базовую версию PHP $_SESSION. Изменение последнего также изменяет аналог фреймворка.
Fat-Free не поддерживает просто тупое хранилище переменных и их значений. Он также может автоматизировать управление сеансами и другие вещи. Назначение или извлечение значения через SESSIONпеременную F3 автоматически запускает сеанс. Если вы используете $_SESSION(или связанные с сеансом функции) непосредственно, а не переменную фреймворкаSESSION, ваше приложение становится ответственным за управление сеансами.
As a rule, framework variables do not persist between HTTP requests. Only SESSION and COOKIE (и их элементы), которые сопоставлены с PHP $_SESSION и $_COOKIE глобальные переменные не зависят от состояния HTTP.
Существует несколько предопределенных глобальных переменных, используемых внутри Fat-Free, и вы, безусловно, можете использовать их в своем приложении. Будьте уверены, что вы знаете, что делаете. Изменение некоторых глобальных переменных без жира может привести к неожиданному поведению фреймворка.
Платформа содержит несколько переменных, которые помогут вам упорядочить структуру файлов и каталогов. Мы видели, как мы можем автоматизировать загрузку классов с помощью автоматической AUTOLOAD. Существует глобальная переменная UI пользовательского интерфейса, которая содержит путь, указывающий на расположение ваших HTML-представлений/шаблонов. DEBUG- это еще одна переменная, которую вы будете довольно часто использовать во время разработки приложений, и она используется для настройки детализации следов ошибок.
Полный список встроенных переменных фреймворка приведен в Кратком справочнике.

Правила Именования

Переменная фреймворка может содержать любое количество букв, цифр и символов подчеркивания. Он должен начинаться с Альфа-символа и не должен содержать пробелов. Имена переменных чувствительны к регистру.
F3 использует все заглавные буквы для внутренних предопределенных глобальных переменных. Ничто не мешает вам использовать имена переменных, состоящие из всех заглавных букв в вашей собственной программе, но, как правило, придерживайтесь нижнего регистра (или camelCase) при настройке собственных переменных, чтобы избежать любого возможного конфликта с текущими и будущими выпусками фреймворка.
Вы не должны использовать зарезервированные PHP слова, такие какif, for, class, и т.д.default как имена переменных фреймворка. Это может привести к непредсказуемым результатам.

Работа со строковыми и массивными переменными

F3 также предоставляет ряд инструментов, которые помогут вам работать с переменными фреймворка.
$f3->set('a','fire');
$f3->concat('a','cracker');
echo $f3->get('a'); // возвращает строку 'firecracker'
$f3->copy('a','b');
echo $f3->get('b'); // возвращает ту же строку: 'firecracker'
F3 также предоставляет некоторые примитивные методы для работы с переменными массива:
$f3->set('colors',array('red','blue','yellow'));
$f3->push('colors','green'); // работает как PHP array_push()
echo $f3->pop('colors'); // возвращается 'green'
$f3->unshift('colors','purple'); // похоже на array_unshift()
echo $f3->shift('colors'); // возвращается 'purple'
$f3->set('grays',array('light','dark'));
$result=$f3->merge('colors','grays'); // объединяет два массива

Структуры Каталогов - Сделай сам!

В отличие от других фреймворков, которые имеют жесткую структуру папок, F3 дает вам большую гибкость. У вас может быть структура папок, которая выглядит следующим образом (заключенные в скобки слова во всех заглавных буквах представляют переменные фреймворка F3, которые нуждаются в настройке):
/ веб-корень, где находится index.php
app/ файлы приложений
dict/ ЛОКАЛИ, необязательно
controllers/
logs/ ЛОГИ, необязательно
models/
views/ UI
css/
js/
lib/ вы можете хранить base.php здесь
tmp/
cache/
Не стесняйтесь организовывать свои файлы и каталоги так, как вы хотите. Просто установите соответствующие глобальные переменные F3. Если вы хотите действительно безопасный сайт, Fat-Free даже позволяет хранить все ваши файлы в недоступном для Интернета каталоге. Единственное требование состоит в том , чтобы вы оставили index.php, .htaccess и свои публичные файлы, такие как CSS, JavaScript, изображения и т. д. в пути, видимом вашему браузеру.

Об обработчике ошибок F3

Fat-Free генерирует свои собственные HTML-страницы ошибок с трассировками стека, чтобы помочь вам в отладке. Вот вам пример:

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

strpos () ожидает по крайней мере 2 параметра, 0 задано
• var/html/dev/main.php:96 strpos()
• var/html/dev/index.php:16 Base->run()
Если вы чувствуете, что это слишком просто или хотите сделать что-то другое, когда возникает ошибка, вы можете создать свой собственный обработчик ошибок:
$f3->set('ONERROR',
function($f3) {
// код пользовательского обработчика ошибок находится здесь
// используйте это, если вы хотите отобразить ошибки в
// формат соответствует теме вашего сайта
echo $f3->get('ERROR.text');
}
);
F3 поддерживает глобальную переменную, содержащую сведения о последней ошибке, возникшей в вашем приложении. ERRORПеременная представляет собой массив, структурированный следующим образом:
`ERROR.code` - код ошибки состояния HTTP (`404`, `500`, etc.)
`ERROR.status` - краткое описание кода состояния HTTP. например, `Не найдено"
`ERROR.text` - контекст ошибки
`ERROR.trace` - трассировка стека, хранящаяся в `array()`
`ERROR.level` - уровень отчетности об ошибках (`E_WARNING`, `E_STRICT`, etc.)
Если ваш проект использует шаблоны, вы можете обработать потенциальные ошибки шаблонов, очистив любой существующий выходной буфер и отобразив вместо него новую страницу:
$f3->set('ONERROR',
function($f3) {
// рекурсивно очистите существующие выходные буферы:
while (ob_get_level())
ob_end_clean();
// ваша свежая страница здесь:
echo $f3->get('ERROR.text');
}
);
При разработке приложения лучше всего установить максимальный уровень отладки, чтобы можно было проследить все ошибки до их первопричины:
$f3->set('DEBUG',3);
Просто вставьте команду в последовательность начальной загрузки вашего приложения.
Как только ваше приложение будет готово к выпуску, просто удалите инструкцию из вашего приложения или замените ее на:
$f3->set('DEBUG',0);
Это приведет к подавлению вывода трассировки стека на любой сгенерированной системой HTML-странице ошибок (потому что она не предназначена для просмотра посетителями вашего сайта).
DEBUG может иметь значения в диапазоне от 0(stack trace suppressed) до 3(most verbose with class and function call logs).
Не забывай! Трассировки стека могут содержать пути, имена файлов, команды базы данных, имена пользователей и пароли. Вы можете подвергнуть свой веб-сайт ненужным рискам безопасности, если не установите DEBUGглобальную переменную 0в рабочей среде.
Можно настроить описание ошибки в момент запуска ошибки, передав новое описание в качестве второго аргумента, например :
$f3->error(401, "В запросе отсутствует информация, необходимая для предоставления доступа.");

конфигурационный файл

Если ваше приложение должно быть настроено пользователем, F3 предоставляет удобный метод чтения конфигурационных файлов для настройки вашего приложения. Таким образом, вы и ваши пользователи можете настроить приложение, не изменяя никакого PHP-кода.
Существует 4 предопределенных названия разделов:
  • [globals] для определения глобальных переменных
  • [routes] для определения маршрутов
  • [maps] для определения карт маршрутов
  • [redirects] для перенаправления маршрутов
NB: [globals]предполагается, если раздел не был предоставлен. Вы можете объединить все разделы в один конфигурационный файл-хотя наличие [routes], [maps], и [redirects]в отдельном файле рекомендуется. Таким образом, вы можете разрешить конечным пользователям изменять некоторые флаги конкретных приложений и в то же время запретить им вмешиваться в вашу логику маршрутизации.
Вот как использовать различные разделы:.

[глобальный]

Вместо того чтобы создавать PHP скрипт содержащий следующий пример кода:
$f3->set('num',123);
$f3->set('str','abc');
$f3->set('hash',array('x'=>1,'y'=>2,'z'=>3));
$f3->set('items',array(7,8,9));
$f3->set('mix',array('this',123.45,FALSE));
Вы можете создать конфигурационный файл, который делает то же самое:
[globals]
num=123
; это обычная строка
str=abc
; другой способ присвоения строк
str="abc"
; это массив
hash[x]=1
hash[y]=2
hash[z]=3
; также распознается точечная нотация
hash.x=1
hash.y=2
hash.z=3
; это также массив
items=7,8,9
; массив со смешанными элементами
mix="this",123.45,FALSE
Вместо длинных $f3->set()инструкций в коде вы можете поручить фреймворку загрузить конфигурационный файл в качестве замены кода. Давайте сохраним приведенный выше текст в качестве настройки setup.cfg. Тогда мы можем назвать его простым:
$f3->config('setup.cfg');
Строковые значения не должны заключаться в кавычки, если только вы не хотите включить начальные или конечные пробелы. Если запятая должна рассматриваться как часть строки, заключите ее в двойные кавычки - в противном случае значение будет рассматриваться как массив (запятая используется в качестве разделителя элементов массива). Строки могут охватывать несколько строк:
[globals]
str="это \
очень длинная \
строка"

[пути сообщения]

F3 также дает вам возможность определять маршруты HTTP в конфигурационных файлах:
[routes]
GET /=home
GET /404=App->page404
GET /page/@num=Page->controller
; Кэшируйте маршрут в течение 10 минут
GET /contact=App->contact, 600
; названный маршрут
GET @about: /about=Page->about

[карты]

Карты маршрутов также можно определить в конфигурационных файлах:
[maps]
/blog=Blog\Login
/blog/@controller=Blog\@controller

[перенаправляет]

Вы также можете перенаправлять устаревшие маршруты на новые страницы в конфигурационных файлах:
[redirects]
GET|HEAD /obsoletepage = /newpage
GET|HEAD /dash = @dashboard
GET|HEAD /search = https://www.google.com

[конфигурации]

Вы также можете включить другие конфигурационные файлы.
[configs]
app/routes.ini = true
app/app_ext.ini = false
Не позволяйте правильному значению сбить вас с толку, оба файла выше включены. Параметр true/false boolean запускает $allowаргумент метода config, который позволяет разрешить динамический токен в ваших конфигурационных файлах.

Пользовательский раздел

Любое другое название раздела, кроме 3 выше, интерпретируется как [globals]раздел с префиксом имени раздела.
Итак следующее:
[foo]
a = 1
b = 2
[foo.hash]
x = 1
y = 2
z = 3
эквивалентно:
$f3->set('foo',array(
'a' => 1,
'b' => 2,
'hash' => array(
'x' => 1,
'y' => 2,
'z' => 3
)
));

Секционные Крючки

Кроме того, можно определить пользовательский обратный вызов, который применяется к каждому значению:
[foo.bar:strtoupper]
x = hello
y = world