Содержание
Переменные 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]
для определения карт маршрутов
[redirec
ts] для перенаправления маршрутов
На заметку! Вы можете объединить все разделы в один файл конфигурации, хотя рекомендуется [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