Я новичок в безмасляной структуре, и я немного запутался в глобальных переменных.
$f3->route('GET /@page','display'); function display($f3) { echo 'I cannot object to an object' . $f3->get('PARAMS.page'); }; $f3->run();
Здесь я использую GET / @ страницу как токен для маршрута URL. В функции i затем используйте $ f3-> get ('PARAMS.page'), чтобы получить значение этой переменной.
Поскольку $ f3-> get – это метод для получения глобальной переменной, почему мне нужно передать класс $ f3 функции.
Следующий код не работает (класс $ f3 не передается функции).
$f3->route('GET /@page','display'); function display() { echo 'I cannot object to an object' . $f3->get('PARAMS.page'); }; $f3->run();
Поэтому мой вопрос: почему я должен передать класс $ f3 функции?
Спасибо…
Переменная экземпляра F3, объявленная в самом начале вашего index.php ( $f3=require...
), может быть извлечена в любом месте кода, используя статический вызов $f3=Base::instance()
.
В любом случае, для удобства, во время маршрутизации этот экземпляр F3, а также параметры маршрута передаются обработчику маршрута. Поэтому вместо определения вашего обработчика маршрута:
function display() { $f3=Base::instance(); echo 'I cannot object to an object' . $f3->get('PARAMS.page'); };
вы можете определить его как:
function display($f3) { echo 'I cannot object to an object' . $f3->get('PARAMS.page'); };
или даже лучше:
function display($f3,$params) { echo 'I cannot object to an object' . $params['page']; };
Эти 3 функции абсолютно идентичны, поэтому вы должны подобрать тот, который вы лучше всего понимаете. Но вы должны помнить, что параметры $f3
и $params
передаются только во время маршрутизации , что означает 3 функции: обработчик маршрута, крюк beforeRoute () и крюк afterRoute (). В любом месте кода (в том числе внутри конструктора класса) вы должны вызвать Base::instance()
для извлечения экземпляра F3.
PS: ваш вопрос: «Почему мне нужно передать класс $ f3 функции?», Я бы предложил вам переименовать его заголовок, чтобы отразить его.
ОБНОВЛЕНИЕ: Начиная с версии 3.2.1 экземпляр F3 также передается конструктору класса обработчика маршрута:
class myClass { function display($f3,$params) { echo 'I cannot object to an object' . $params['page']; } function __construct($f3) { //do something with $f3 } }