$f3->run()
:@count
для представления части URL-адреса. Фреймворк будет обслуживать любой URL-адрес запроса, соответствующий префиксу /brew/
, например /brew/99
, /brew/98
и т. д. Это будет отображать "99 бутылок пива на стене"
и "98 бутылок пива на стене"
, соответственно. /brew/небьющиеся
.
(Ожидайте, что это покажет "небьющиеся бутылки пива на стене".) Когда такой динамический маршрут задан, Fat-Free автоматически заполняет глобальную переменную массива PARAMS
значением захваченных строк в URL-адресе. Вызов $f3->get()
внутри функции обратного вызова извлекает значение переменной фреймворка. Вы, конечно, можете применить этот метод в своем коде как часть презентации или бизнес-логики. Но мы обсудим это более подробно позже.PARAMS['count']
, которая подвержена ошибкам опечаток
и несбалансированным фигурным скобкам. В представлениях и шаблонах фреймворк допускает @PARAMS.count
графическая нотация, которая несколько похожа на Javascript. (Мы рассмотрим представления и шаблоны позже.)*
), чтобы принять любой URL-адрес после маршрута /brew
- если вас действительно не волнует остальная часть пути:GET /brew/@count
и GET /brew/*
вместе в одном приложении. Используйте одно или другое. Другое дело: Fat-Free видит GET /brew
как отдельный и отличный от маршрута GET /brew/@count
. Каждый из них может иметь различные обработчики маршрутов.Важно: все обработчики маршрутов автоматически передают экземпляр фреймворка и токены маршрута. Смотреть здесь.
GET
в этом примере), предшествующего символу @
, и отделяется от части URL двоеточием :
символ. Вы можете вставить пробел после двоеточия, если это облегчает чтение вашего кода (как показано здесь).reroute()
, например:urlencode()
ваши аргументы, если у вас есть символы, которые
не соответствуют рекомендациям RFC 1738 для хорошо сформированных URL - адресов.{{ @name, 'a=5,b='[email protected] | alias }}
. Вам нужно только установить или перезаписать токены в именованных маршрутах, которые вам нужно изменить. Все остальные токены заполняются автоматически, исходя из текущего маршрута.GET @complex:/resize/@format/*/sep/*)
, используйте числовой индекс, чтобы указать его новое значение, например: {{'complex','format=20x20,2=foo/bar,3=baz.gif'|alias}}
./var/www
. Если поступит входящий HTTP-запрос на файл или папку, PHP будет искать его в корне веб-сайта
и отправлять в браузер, если он будет найден. В противном случае PHP загрузит индекс по index.php
(содержащий ваш код с поддержкой F3).!-f
) или путь (!-d
) или символическая ссылка (!-l
) можно найти, он должен передать управление index.php
, который содержит наш главный / фронт контроллер, и который, в свою очередь, вызывает фреймворк..htaccess
, содержащий указанные выше директивы Apache, всегда должен находиться в той же папке, что и index.php
.index.php
на вашем жестком диске. Типичная конфигурация-это:RewriteBase
перезаписи .файл .htaccess
. Если приложение не работает или маршрут по умолчанию
/
работает, но /test
, возможно, не работает, попробуйте добавить базовый путь:ServerName
(site1.com
и еще site2.com
в нашем примере) должен быть указан
в вашем файле /etc/hosts
. В Windows вы должны отредактировать C:/WINDOWS/system32/drivers/etc/hosts
-да. Для осуществления изменений может потребоваться перезагрузка компьютера. Затем вы можете направить свой веб-браузер
по указанному адресу http://site1.com
или http://site2.com
виртуальные хосты значительно облегчают развертывание ваших приложений.mod_rewrite
недоступен на вашем сервере или вы хотите немного повысить производительность, вы можете воспользоваться директивой FallbackResource, доступной
в Apache 2.4 и выше..htaccess
или в вашей конфигурации VirtualHost:http://www.example.com/obsoletepage
используя HTTP GET или HEAD request, фреймворк перенаправляет пользователя на URL-адрес: http://www.example.com/newpage
как показано в приведенном выше примере. Вы также можете перенаправить пользователя на другой сайт, например $f3->reroute('http://www.anotherexample.org/');
.$f3->reroute()
для отправки пользователя
на другую страницу того же веб-сайта, если вы можете направить поток вашего приложения, вызвав функцию или метод, который обрабатывает целевой маршрут. Однако этот подход
не изменит URL-адрес в адресной строке веб-браузера пользователя. Если это не то поведение, которое вы хотите, и вам действительно нужно отправить пользователя на другую страницу,
в таких случаях, как успешная отправка формы или после аутентификации пользователя,
Fat-Free отправляет заголовок HTTP 302 Found
. Для всех других попыток перенаправить
на другую страницу или сайт фреймворк отправляет заголовок HTTP 301 Moved Permanently
.GET /dogs/@breed
. Логика вашего приложения может включать поиск в базе данных и попытку получить запись, соответствующую значению @breed
во входящем HTTP-запросе. Поскольку Fat-Free будет принимать любое значение после префикса /dogs/
из-за наличия токена @breed
, отображение сообщения HTTP 404 Not Found
программно становится необходимым, когда программа не находит никакого соответствия
в нашей базе данных. Для этого используйте следующую команду:$f3->map()
предоставляет интерфейс ReST путем сопоставления HTTP-методов
в маршрутах с эквивалентными методами объекта или класса PHP. Если ваше приложение получает входящий HTTP-запрос типа GET /cart/123
, Fat-Free автоматически передаст управление методу get()
объекта или класса. Аналогично, запрос POST /cart/123
будет перенаправлен в метод класса элементов post()
.PUT
и DELETE
в обычных HTML-формах. Эти и другие методы ReST (HEAD
и CONNECT
) доступны только через AJAX-вызовы на сервер. Однако они могут быть туннелированы через POST
запрос, установив параметр _method
в нужный http-глагол.HTTP 405 Method Not Allowed
. F3 автоматически реагирует с соответствующими заголовками, параметры HTTP OPTIONS
методом. Фреймворк не будет сопоставлять этот запрос классу.include
или require
только для загрузки классов PHP, сохраненных в разных файлах и разных местах. Фреймворк может сделать это автоматически для вас. Просто сохраните файлы классов (по одному классу на файл) в папке (например, "myclassfiles") и установите переменную autoload, указывающую на эту папку:BarBaz
, ваш файл должен быть назван BarBaz.php
. barbaz.php
в нижнем регистре тоже будет работать. $obj=new Barbaz;
, Fat-Free Framework будет искать файл barbaz.php в пути(путях), указанном в переменной autoloader. Как только он найдет файл, он будет включать в себя использование команды require
PHP. Вот как работает автоматическая загрузка.AUTOLOAD
, используя абсолютный путь, т. е. /var/www/mywebsite.com/myclassfiles/
или используя относительный путь, как видно из расположения вашего индекса.PHP-файл ../myclassfiles/
, когда index.php находится в файле /var/www/mywebsite.com/
.AUTOLOAD
, чтобы она указывала на несколько папок:AUTOLOAD
позволяет иерархиям классов находиться в подпапках с аналогичными именами, поэтому, если вы хотите, чтобы фреймворк автоматически загружал класс пространства имен, который вызывается следующим образом:/var/www/html/
является веб-корень, затем F3 будет выглядеть для класса в /var/www/html/autoload/gadgets/ipad.php
. Файл ipad.php
должен иметь следующий минимальный код:show()
класса Home
в основном пространстве имен. Home
класс должен быть сохранен в папке classes/main/home.php
для того, чтобы он загружался автоматически.Home
класса во время выполнения и после этого вызовет метод show()
.Main\Home
, можно имена Main/Home.php
или main/home.php
. ⇒ main\Home.php
, Main\hoME.php
или MAIN\HOME.php
не будет загружаться!AUTOLOAD
в виде массива пути и пользовательской функции. Допустим, что все ваши имена файлов прописные. Тогда вместо определения $f3->set('AUTOLOAD','classes/'
,
вы должны определить:Main
, но перед выполнением метода home()
фреймворк ищет метод в этом классе с именем beforeRoute()
. Если он присутствует, F3 запускает код, содержащийся в обработчике событий beforeRoute()
, перед передачей управления методу, указанному в маршруте, в нашем примере методу home()
. После завершения работы метода фреймворк ищет обработчик событий afterRoute()
, который вызывается, если он присутствует. Обработчики событий beforeroute()
и afterroute()
являются общими для данного класса. Это означает, что если вы определили по разным маршрутам с использованием различных методов этого же класса, например, 'GET /login','User->login'
и 'GET /logout','User->logout'
, обе стороны будут одинаковыми beforeroute()
и afterroute()
обработчики событий.beforeRoute()
и afterRoute()
в базовом классе контроллера и попросите
их применяться к каждому запросу. Конечно, вы можете переопределить их в дочерних контроллерах, определив пользовательские обработчики beforeRoute()
и afterRoute()
в дочерних классах. Можно также создать beforeRoute()
и afterRoute()
в дочернем классе
и наследовать обработчики переднего контроллера, вызывая parent::beforeRoute();
или parent::afterRoute();
в дочерних классах./products/itemize
, F3 извлекает строку 'itemize'
из URL-адреса и передает ее маркеру @action
в обработчике маршрута. Затем F3 будет искать класс с именем Products
и выполнять его метод itemize()
.HTTP 404 Not Found
во время выполнения, если он не может передать управление классу или методу, связанному с текущим маршрутом, т. е. нет определенного класса и/или метода, соответствующего запрошенному маршруту.Page->getFragment()
только
в том случае, если сервер получит заголовок X-Requested-With: XMLHttpRequest
(объект AJAX). Если обнаружен обычный (синхронный) запрос, F3 просто опустится до следующего совпадающего шаблона, и в этом случае он выполняет обратный вызов Page->getFull()
.$f3->map()
.php index.php test
соответствует GET /test
php index.php log show --limit=50 --full
соответствует GET /log/show?limit=50&full=
php index.php cache clear -f -v -i -n=23
соответствует GET /cache/clear?f=&v=&i=&n=23
php index.php cache clear -fvi -n=23
php index.php cache clear -fvin=23
php index.php cache -fvin=23 clear
php index.php -fvin=23 cache clear
php index.php -fvi cache clear -n=23
$_GET
.