Переменные F3

Базовые понятия

Переменные, определенные в Fat-Free, являются глобальными, т.е. к ним может получить доступ любой компонент. Глобальные объекты фреймворка не идентичны глобальным объектам PHP. Переменная с именем F3 content не идентична переменной PHP $content. F3 - это самостоятельный механизм, который поддерживает свою собственную отдельную таблицу символов для системных и прикладных переменных. F3, как и любая хорошо разработанная объектно-ориентированная программа, не загрязняет глобальное пространство имен PHP константами, переменными, функциями или классами, которые могут конфликтовать с любым другими приложениями. В отличие от других фреймворков, F3 не использует define() оператор PHP. Все константы фреймворка ограничены классами.

Чтобы присвоить значение переменной в F3 нужно сделать следующее:

$f3->set('var',value)

Примечание. Переменные в F3 принимают все типы данных PHP, включая объекты и анонимные функции.

Чтобы установить сразу несколько переменных:

$f3->mset(
    array(
        'foo'=>'bar',
        'baz'=>123
    )
);

Чтобы получить значение переменной F3 с именем var:

$f3->get('var')

Чтобы удалить переменную F3 из памяти, если она вам больше не нужна, используйте метод:

$f3->clear('var')

Чтобы узнать, была ли ранее определена переменная:

$f3->exists('var')

GLOBALS

F3 поддерживает свою собственную таблицу символов для переменных фреймворка и приложения, которые не зависят от PHP. Некоторые переменные переносятся в глобальные переменные PHP. SESSION в F3 эквивалентен $_SESSION и REQUEST в F3 соответствует $_REQUEST. Рекомендуется использовать переменные F3 вместо переменных PHP, чтобы работать с различными функциями, классами и методами. У них есть преимущества:

Вы можете использовать переменные фреймворка прямо в своих шаблонах. Вам не нужно указывать PHP о необходимости ссылаться на переменную вне текущей области с помощью глобального ключевого слова внутри каждой функции или метода. Все переменные F3 глобальны для вашего приложения. Присваивание F3-эквивалента глобальной переменной PHP, происходит в дву-стороннем порядке, SESSION изменяет базовый PHP $_SESSION. Изменение последнего также изменяет копию SESSION в F3. Fat-Free не предлагает просто хранилище переменных и их значений. Он также может автоматизировать управление сессиями и другой функционал. Присвоение или получение значения через SESSION переменную F3 автоматически запускает сессию. Если вы используете $_SESSION(или функции, связанные с сессией) напрямую, вместо переменной платформы SESSION, ваше приложение должно самостоятельно контроллировать сессию.

Как правило, переменные F3 не сохраняются между HTTP-запросами. Только SESSION и COOKIE(и их элементы), которые соответсвуют в PHP $_SESSION и $_COOKIE, хранят свои состояния.

Во фреймворке есть несколько переменных, которые помогут вам организовать ваши файлы и структуры каталогов. Мы увидели, как автоматизировать загрузку классов с помощью AUTOLOAD. Существует глобальная переменная UI, которая содержит путь, указывающий на расположение ваших HTML-views / шаблонов. DEBUG - еще одна переменная, которую вы будете довольно часто использовать при разработке приложений, и она используется для трассировки ошибок.

Имена переменных

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

F3 использует заглавные буквы для внутренних предопределенных глобальных переменных. Ничто не мешает вам использовать имена переменных, состоящие только из заглавных букв, в вашей собственной программе, но,старайтесь придерживаться строчных букв (или верблюжьего регистра) при создании собственных переменных, чтобы избежать любого возможного конфликта с текущими и будущими выпусками фреймворка.

Вы не должны использовать зарезервированные слова, такие как if, for, class, default и т.д. в качестве имен переменных F3. Это может привести к непредсказуемым результатам.

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

F3 предоставляет ряд инструментов, которые помогут вам в работе с переменными фреймворка.

$f3->set('a','fire');
$f3->concat('a','cracker');
echo $f3->get('a'); // returns the string 'firecracker'
 
$f3->copy('a','b');
echo $f3->get('b'); // returns the same string: 'firecracker'

F3 также предоставляет несколько примитивных методов для работы с массивами:

$f3->set('colors',array('red','blue','yellow'));
$f3->push('colors','green'); // works like PHP's array_push()
echo $f3->pop('colors'); // returns 'green'
 
$f3->unshift('colors','purple'); // similar to array_unshift()
echo $f3->shift('colors'); // returns 'purple'
 
$f3->set('grays',array('light','dark'));
$result=$f3->merge('colors','grays'); // merges the two arrays

Кастомные структуры каталогов

В отличие от других фреймворков, имеющих жесткую структуру папок, F3 дает вам большую гибкость. У вас может быть структура папок, которая выглядит следующим образом (слова в скобках, написанные заглавными буквами, представляют переменные фреймворка F3, которые нужно настроить):

Организовывайте свои файлы и каталоги как хотите. Просто установите соответствующие глобальные переменные F3. Если вам нужен действительно безопасный сайт, Fat-Free даже позволяет хранить все ваши файлы в каталогах, недоступных из Интернета. Единственное требование состоит в том , что вы оставите index.php, .htaccess и ваши общедоступные файлы, как CSS, JavaScript, изображения и т.д. в пути, видимые из вне.

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

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

Если вам кажется, что это слишком просто, или вы хотите делать другие манипуляции при возникновении ошибки, вы можете создать свой собственный обработчик ошибок:

$f3->set('ONERROR',
    function($f3) {
        // custom error handler code goes here
        // use this if you want to display errors in a
        // format consistent with your site's theme
        echo $f3->get('ERROR.text');
    }
);

F3 поддерживает глобальную переменную, содержащую сведения о последней ошибке, произошедшей в вашем приложении. Переменная ERROR - это массив, структурированный следующим образом:

`ERROR.code` - the HTTP status error code (`404`, `500`, etc.)
`ERROR.status` - a brief description of the HTTP status code. e.g. `'Not Found'`
`ERROR.text` - error context
`ERROR.trace` - stack trace stored in an `array()`
`ERROR.level` - error reporting level (`E_WARNING`, `E_STRICT`, etc.)

Если в вашем проекте используются шаблоны, вы можете обработать потенциальные ошибки шаблона, очистив любой существующий буфер вывода и отобразив вместо этого новую страницу:

$f3->set('ONERROR',
    function($f3) {
	// recursively clear existing output buffers:
        while (ob_get_level())
            ob_end_clean();
        // your fresh page here:
        echo $f3->get('ERROR.text');
    }
);

При разработке приложения лучше всего установить максимальный уровень отладки, чтобы вы могли отследить все ошибки до их основной причины:

$f3->set('DEBUG',3);
 

Просто вставьте команду в последовательность начальной загрузки вашего приложения.

Когда ваше приложение будет готово к выпуску, просто удалите оператор из своего приложения или замените его на:

$f3->set('DEBUG',0);

Это подавит вывод трассировки стека на любой странице в случае ошибки сгенерированной системой (поскольку она не предназначена для просмотра посетителями вашего сайта).

DEBUG может иметь значения в диапазоне от 0(трассировка стека выключена) до 3 (наиболее подробная трассировка с журналами вызовов классов и функций).

Важно! Трассировки стека могут содержать пути, имена файлов, команды базы данных, имена пользователей и пароли. Вы можете подвергнуть свой веб-сайт ненужным рискам безопасности, если не установите для DEBUG переменной значение 0 после выхода в релиз.

Можно настроить описание ошибки в момент ее запуска, передав новое описание в качестве второго аргумента, например:

$f3->error(401, "The information necessary to grant access is missing from the request.");

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

F3 предоставляет удобный метод чтения файлов конфигурации для настройки вашего приложения. Таким образом, вы и ваши пользователи можете настроить приложение, не изменяя код PHP.

Есть 4 предопределенных названий разделов:

[globals] для определения глобальных переменных [routes] для определения маршрутов [maps] для определения карт маршрутов [redirects] для перенаправления маршрутов

На заметку! Вы можете объединить все разделы в один файл конфигурации, хотя рекомендуется [routes], чтобы [maps], и были [redirects] в отдельных файлах. Таким образом, вы можете разрешить конечным пользователям изменять некоторые специфичные для приложения режимы, и в то же время ограничить их вмешательство в вашу логику маршрутизации.

[globals]

Вместо создания сценария 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
; this is a regular string
str=abc
; another way of assigning strings
str="abc"
; this is an array
hash[x]=1
hash[y]=2
hash[z]=3
; dot-notation is recognized too
hash.x=1
hash.y=2
hash.z=3
; this is also an array
items=7,8,9
; array with mixed elements
mix="this",123.45,FALSE
 

Вместо длинных $f3→set()инструкций в вашем коде вы можете указать фреймворку загрузить файл конфигурации в качестве замены кода. Сохраним приведенный выше текст как setup.cfg. Затем мы можем вызвать его одной строчкой кода:

$f3->config('setup.cfg');

Строковые значения не нужно заключать в кавычки, если вы не хотите включать начальные или конечные пробелы. Если запятую следует рассматривать как часть строки, заключите строку в двойные кавычки, иначе значение будет рассматриваться как массив (запятая используется как разделитель элементов массива). Строки могут иметь переносы:

[globals]
str="this is a \
very long \
string"

[routes]

F3 также дает вам возможность определять маршруты HTTP в файлах конфигурации:

[routes]
GET /=home
GET /404=App->page404
GET /page/@num=Page->controller
; Cache the route for 10 minutes
GET /contact=App->contact, 600
; named route
GET @about: /about=Page->about

[maps]

Карты маршрутов также могут быть определены в файлах конфигурации:

[maps]
/blog=Blog\Login
/blog/@controller=Blog\@controller
 

[redirects]

Вы также можете перенаправить маршруты на страницы в файлах конфигурации:

[redirects]
GET|HEAD /obsoletepage = /newpage
GET|HEAD /dash = @dashboard
GET|HEAD /search = https://www.google.com

[configs]

Вы также можете включить другие файлы конфигурации в основной конфигурационный файл.

[configs]
app/routes.ini = true
app/app_ext.ini = false

Оба вышеуказанных файла включены. true/ false это аргумент конфигурации метода, что позволяет разрешать динамические токены в ваших конфигурационных файлах.

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

Любое другое имя раздела, кроме описаных выше, интерпретируется как [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
  )
));

Хуки секций

Также можно определить собственный callback, который применяется к каждому значению:

[foo.bar:strtoupper]
x = hello
y = world
Печать/экспорт